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""