diff --git a/crudkit/core/base.py b/crudkit/core/base.py
index 0540ec0..dae5615 100644
--- a/crudkit/core/base.py
+++ b/crudkit/core/base.py
@@ -6,8 +6,8 @@ Base = declarative_base()
@declarative_mixin
class CRUDMixin:
id = Column(Integer, primary_key=True)
- created_at = Column(DateTime, default=func.now())
- updated_at = Column(DateTime, default=func.now(), onupdate=func.now())
+ created_at = Column(DateTime, default=func.now(), nullable=False)
+ updated_at = Column(DateTime, default=func.now(), nullable=False, onupdate=func.now())
def as_dict(self):
# Combine all columns from all inherited tables
diff --git a/inventory/models/area.py b/inventory/models/area.py
index a0c3e28..cdbbcd0 100644
--- a/inventory/models/area.py
+++ b/inventory/models/area.py
@@ -2,6 +2,7 @@ from typing import List, Optional
from sqlalchemy import Boolean, Unicode
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -12,7 +13,7 @@ class Area(Base, CRUDMixin):
rooms: Mapped[List['Room']] = relationship('Room', back_populates='area')
- is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False)
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
def __repr__(self):
return f""
\ No newline at end of file
diff --git a/inventory/models/brand.py b/inventory/models/brand.py
index 9314a13..13249e3 100644
--- a/inventory/models/brand.py
+++ b/inventory/models/brand.py
@@ -2,6 +2,7 @@ from typing import List
from sqlalchemy import Boolean, Unicode
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -12,7 +13,7 @@ class Brand(Base, CRUDMixin):
inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='brand')
- is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False)
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
def __repr__(self) -> str:
return f""
diff --git a/inventory/models/device_type.py b/inventory/models/device_type.py
index 5611821..58def72 100644
--- a/inventory/models/device_type.py
+++ b/inventory/models/device_type.py
@@ -1,7 +1,8 @@
from typing import List, Optional
-from sqlalchemy import Unicode
+from sqlalchemy import Boolean, Unicode
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -12,5 +13,7 @@ class DeviceType(Base, CRUDMixin):
inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='device_type')
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
+
def __repr__(self):
return f"- "
diff --git a/inventory/models/image.py b/inventory/models/image.py
index be7891b..fe0a5f8 100644
--- a/inventory/models/image.py
+++ b/inventory/models/image.py
@@ -1,7 +1,8 @@
from typing import List, Optional
-from sqlalchemy import DateTime, Unicode, func
+from sqlalchemy import Boolean, DateTime, Unicode, func
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -16,5 +17,7 @@ class Image(Base, CRUDMixin):
user: Mapped[Optional['User']] = relationship('User', back_populates='image')
# worklogs: Mapped[List['WorkLog']] = relationship('WorkLog', back_populates='images')
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
+
def __repr__(self):
return f""
diff --git a/inventory/models/inventory.py b/inventory/models/inventory.py
index 82ab1f5..de6bd7b 100644
--- a/inventory/models/inventory.py
+++ b/inventory/models/inventory.py
@@ -2,6 +2,7 @@ from typing import List, Optional
from sqlalchemy import Boolean, DateTime, ForeignKey, Index, Integer, Unicode
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -15,7 +16,7 @@ class Inventory(Base, CRUDMixin):
condition: Mapped[str] = mapped_column(Unicode(255))
model: Mapped[Optional[str]] = mapped_column(Unicode(255))
notes: Mapped[Optional[str]] = mapped_column(Unicode(255))
- shared: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
+ shared: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
timestamp: Mapped[DateTime] = mapped_column(DateTime)
brand: Mapped[Optional['Brand']] = relationship('Brand', back_populates='inventory')
@@ -35,6 +36,8 @@ class Inventory(Base, CRUDMixin):
work_logs: Mapped[Optional[List['WorkLog']]] = relationship('WorkLog', back_populates='work_item')
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
+
def __repr__(self):
parts = [f"id={self.id}"]
diff --git a/inventory/models/room.py b/inventory/models/room.py
index a74f31d..3447fed 100644
--- a/inventory/models/room.py
+++ b/inventory/models/room.py
@@ -1,7 +1,8 @@
from typing import List, Optional, TYPE_CHECKING
-from sqlalchemy import ForeignKey, Integer, Unicode
+from sqlalchemy import Boolean, ForeignKey, Integer, Unicode
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -21,7 +22,9 @@ class Room(Base, CRUDMixin):
users: Mapped[List['User']] = relationship('User', back_populates='location')
room_function: Mapped[Optional['RoomFunction']] = relationship('RoomFunction', back_populates='rooms')
- room_function_id: Mapped[Optional[int]] = mapped_column('function_id', Integer, ForeignKey("room_function.id"), nullable=True, index=True)
+ function_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("room_function.id"), nullable=True, index=True)
+
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
def __repr__(self):
return f""
diff --git a/inventory/models/room_function.py b/inventory/models/room_function.py
index 1aed6f1..2c011fb 100644
--- a/inventory/models/room_function.py
+++ b/inventory/models/room_function.py
@@ -1,7 +1,8 @@
from typing import List, Optional
-from sqlalchemy import Unicode
+from sqlalchemy import Boolean, Unicode
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -12,5 +13,7 @@ class RoomFunction(Base, CRUDMixin):
rooms: Mapped[List['Room']] = relationship('Room', back_populates='room_function')
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
+
def __repr__(self):
return f""
diff --git a/inventory/models/user.py b/inventory/models/user.py
index cfda439..54b4595 100644
--- a/inventory/models/user.py
+++ b/inventory/models/user.py
@@ -2,6 +2,7 @@ from typing import List, Optional, TYPE_CHECKING
from sqlalchemy import Boolean, Integer, ForeignKey, Unicode
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -15,8 +16,8 @@ class User(Base, CRUDMixin):
last_name: Mapped[Optional[str]] = mapped_column(Unicode(255), nullable=True)
title: Mapped[Optional[str]] = mapped_column(Unicode(255), nullable=True)
- active: Mapped[Optional[bool]] = mapped_column(Boolean, nullable=False, default=False)
- staff: Mapped[Optional[bool]] = mapped_column(Boolean, nullable=False, default=False)
+ active: Mapped[Optional[bool]] = mapped_column(Boolean, nullable=False, default=True, server_default=sql.true())
+ staff: Mapped[Optional[bool]] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
image: Mapped[Optional['Image']] = relationship('Image', back_populates='user', passive_deletes=True)
image_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("images.id", ondelete="SET NULL"), nullable=True, index=True)
@@ -32,5 +33,7 @@ class User(Base, CRUDMixin):
work_logs: Mapped[Optional[List['WorkLog']]] = relationship('WorkLog', back_populates='contact')
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
+
def __repr__(self):
return f""
diff --git a/inventory/models/work_log.py b/inventory/models/work_log.py
index 91b3cc2..440ed11 100644
--- a/inventory/models/work_log.py
+++ b/inventory/models/work_log.py
@@ -2,6 +2,7 @@ from typing import List, Optional
from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, Unicode
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -11,7 +12,7 @@ class WorkLog(Base, CRUDMixin):
start_time: Mapped[Optional[DateTime]] = mapped_column(DateTime)
end_time: Mapped[Optional[DateTime]] = mapped_column(DateTime)
- complete: Mapped[Optional[bool]] = mapped_column(Boolean, nullable=False, default=False)
+ complete: Mapped[Optional[bool]] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
contact: Mapped[Optional['User']] = relationship('User', back_populates='work_logs')
contact_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("users.id"), nullable=True, index=True)
@@ -21,5 +22,7 @@ class WorkLog(Base, CRUDMixin):
work_item: Mapped[Optional['Inventory']] = relationship('Inventory', back_populates='work_logs')
work_item_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey('inventory.id'), nullable=True, index=True)
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
+
def __repr__(self):
return f""
diff --git a/inventory/models/work_note.py b/inventory/models/work_note.py
index cb723ef..a89643b 100644
--- a/inventory/models/work_note.py
+++ b/inventory/models/work_note.py
@@ -1,5 +1,6 @@
-from sqlalchemy import DateTime, ForeignKey, Integer, UnicodeText, func
+from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, UnicodeText, func
from sqlalchemy.orm import Mapped, mapped_column, relationship
+from sqlalchemy.sql import expression as sql
from crudkit.core.base import Base, CRUDMixin
@@ -12,6 +13,8 @@ class WorkNote(Base, CRUDMixin):
work_log: Mapped['WorkLog'] = relationship('WorkLog', back_populates='updates')
work_log_id: Mapped[int] = mapped_column(Integer, ForeignKey('work_log.id'))
+ is_deleted: Mapped[Boolean] = mapped_column(Boolean, nullable=False, default=False, server_default=sql.false())
+
def __repr__(self) -> str:
preview = self.content[:30].replace("\n", " ") + "..." if len(self.content) > 30 else self.content
return f""