From cc13321bbcf75c631dc574c86659e12dc09da69d Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Thu, 4 Sep 2025 11:16:07 -0500 Subject: [PATCH 1/2] Oopsie. --- inventory/models/device_type.py | 16 ++++++++++++++++ inventory/models/room.py | 4 ++++ inventory/models/room_function.py | 16 ++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 inventory/models/device_type.py create mode 100644 inventory/models/room.py create mode 100644 inventory/models/room_function.py diff --git a/inventory/models/device_type.py b/inventory/models/device_type.py new file mode 100644 index 0000000..5611821 --- /dev/null +++ b/inventory/models/device_type.py @@ -0,0 +1,16 @@ +from typing import List, Optional + +from sqlalchemy import Unicode +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from crudkit.core.base import Base, CRUDMixin + +class DeviceType(Base, CRUDMixin): + __tablename__ = 'item' + + description: Mapped[Optional[str]] = mapped_column(Unicode(255), nullable=True) + + inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='device_type') + + def __repr__(self): + return f"" diff --git a/inventory/models/room.py b/inventory/models/room.py new file mode 100644 index 0000000..9997d37 --- /dev/null +++ b/inventory/models/room.py @@ -0,0 +1,4 @@ +from crudkit.core.base import Base, CRUDMixin + +class Room(Base, CRUDMixin): + __tablename__ = 'rooms' \ No newline at end of file diff --git a/inventory/models/room_function.py b/inventory/models/room_function.py new file mode 100644 index 0000000..1aed6f1 --- /dev/null +++ b/inventory/models/room_function.py @@ -0,0 +1,16 @@ +from typing import List, Optional + +from sqlalchemy import Unicode +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from crudkit.core.base import Base, CRUDMixin + +class RoomFunction(Base, CRUDMixin): + __tablename__ = "room_function" + + description: Mapped[Optional[str]] = mapped_column(Unicode(255), nullable=True) + + rooms: Mapped[List['Room']] = relationship('Room', back_populates='room_function') + + def __repr__(self): + return f"" From b990805566961a835f9617cb335fc68f2ed589da Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Thu, 4 Sep 2025 11:45:29 -0500 Subject: [PATCH 2/2] More models added. --- inventory/models/room.py | 22 +++++++++++++++++++++- inventory/models/user.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 inventory/models/user.py diff --git a/inventory/models/room.py b/inventory/models/room.py index 9997d37..d83937a 100644 --- a/inventory/models/room.py +++ b/inventory/models/room.py @@ -1,4 +1,24 @@ +from typing import List, Optional + +from sqlalchemy import ForeignKey, Integer, Unicode +from sqlalchemy.orm import Mapped, mapped_column, relationship + from crudkit.core.base import Base, CRUDMixin class Room(Base, CRUDMixin): - __tablename__ = 'rooms' \ No newline at end of file + __tablename__ = 'rooms' + + name: Mapped[Optional[str]] = mapped_column(Unicode(255), nullable=True) + + area: Mapped[Optional['Area']] = relationship('Area', back_populates='rooms') + area_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("area.id"), nullable=True, index=True) + + inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='location') + + 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) + + def __repr__(self): + return f"" diff --git a/inventory/models/user.py b/inventory/models/user.py new file mode 100644 index 0000000..99e6efe --- /dev/null +++ b/inventory/models/user.py @@ -0,0 +1,31 @@ +from typing import List, Optional + +from sqlalchemy import Boolean, Integer, ForeignKey, Unicode +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from crudkit.core.base import Base, CRUDMixin + +class User(Base, CRUDMixin): + __tablename__ = 'users' + + first_name: Mapped[Optional[str]] = mapped_column(Unicode(255), nullable=True) + 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) + + 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) + + inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='owner') + + location: Mapped[Optional['Room']] = relationship('Room', back_populates='owner') + location_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("users.id"), nullable=True, index=True) + + supervisor: Mapped[Optional['User']] = relationship('User', back_populates='subordinates') + supervisor_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("user.id"), nullable=True, index=True) + subordinates: Mapped[List['User']] = relationship('User', back_populates='supervisor') + + def __repr__(self): + return f""