diff --git a/inventory/models/inventory.py b/inventory/models/inventory.py index fabf074..cfb0226 100644 --- a/inventory/models/inventory.py +++ b/inventory/models/inventory.py @@ -4,6 +4,7 @@ if TYPE_CHECKING: from .items import Item from .work_log import WorkLog from .rooms import Room + from .photo import Photo from sqlalchemy import Boolean, ForeignKey, Identity, Index, Integer, Unicode, DateTime, text from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -27,16 +28,17 @@ class Inventory(db.Model): notes: Mapped[Optional[str]] = mapped_column(Unicode(255)) owner_id = mapped_column(Integer, ForeignKey('users.id')) brand_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("brand.id")) - # Photo: Mapped[Optional[str]] = mapped_column(String(8000)) Will be replacing with something that actually works. location_id: Mapped[Optional[str]] = mapped_column(ForeignKey("rooms.id")) barcode: Mapped[Optional[str]] = mapped_column(Unicode(255)) shared: Mapped[Optional[bool]] = mapped_column(Boolean, server_default=text('((0))')) + photo_id: Mapped[Optional[int]] = mapped_column(ForeignKey('photos.id'), nullable=True) location: Mapped[Optional['Room']] = relationship('Room', back_populates='inventory') owner = relationship('User', back_populates='inventory') brand: Mapped[Optional['Brand']] = relationship('Brand', back_populates='inventory') item: Mapped['Item'] = relationship('Item', back_populates='inventory') work_logs: Mapped[List['WorkLog']] = relationship('WorkLog', back_populates='work_item') + photo: Mapped[Optional['Photo']] = relationship('Photo', back_populates='inventory') def __init__(self, timestamp: datetime.datetime, condition: str, type_id: Optional[int] = None, name: Optional[str] = None, serial: Optional[str] = None, diff --git a/inventory/models/photo.py b/inventory/models/photo.py new file mode 100644 index 0000000..fb23eeb --- /dev/null +++ b/inventory/models/photo.py @@ -0,0 +1,25 @@ +from typing import Optional, TYPE_CHECKING +if TYPE_CHECKING: + from .inventory import Inventory + from .users import User + +import datetime + +from sqlalchemy import Integer, Unicode, DateTime, func +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from . import db + +class Photo(db.Model): + __tablename__ = 'photos' + + id: Mapped[int] = mapped_column(Integer, primary_key=True) + filename: Mapped[str] = mapped_column(Unicode(512)) + caption: Mapped[str] = mapped_column(Unicode(255), default="") + timestamp: Mapped[datetime.datetime] = mapped_column(DateTime, default=datetime.datetime.now(), server_default=func.now()) + + inventory: Mapped[Optional['Inventory']] = relationship('Inventory', back_populates='photo') + user: Mapped[Optional['User']] = relationship('User', back_populates='photo') + + def __repr__(self): + return f"" diff --git a/inventory/models/photo_links.py b/inventory/models/photo_links.py new file mode 100644 index 0000000..0888071 --- /dev/null +++ b/inventory/models/photo_links.py @@ -0,0 +1,7 @@ +from .. import db + +worklog_photos = db.Table( + 'worklog_photos', + db.Column('worklog_id', db.Integer, db.ForeignKey('work_log.id'), primary_key=True), + db.Column('photo_id', db.Integer, db.ForeignKey('photos.id'), primary_key=True), +) \ No newline at end of file diff --git a/inventory/models/users.py b/inventory/models/users.py index 8ccbcf8..dd8003a 100644 --- a/inventory/models/users.py +++ b/inventory/models/users.py @@ -3,6 +3,7 @@ if TYPE_CHECKING: from .inventory import Inventory from .rooms import Room from .work_log import WorkLog + from .photo import Photo from sqlalchemy import Boolean, ForeignKey, Identity, Integer, Unicode, text from sqlalchemy.orm import Mapped, mapped_column, relationship @@ -19,13 +20,14 @@ class User(db.Model): first_name: Mapped[Optional[str]] = mapped_column(Unicode(255), nullable=True) location_id: Mapped[Optional[int]] = mapped_column(ForeignKey("rooms.id"), nullable=True) supervisor_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("users.id")) + photo_id: Mapped[Optional[int]] = mapped_column(ForeignKey('photos.id'), nullable=True) supervisor: Mapped[Optional['User']] = relationship('User', remote_side='User.id', back_populates='subordinates') subordinates: Mapped[List['User']] = relationship('User', back_populates='supervisor') - work_logs: Mapped[List['WorkLog']] = relationship('WorkLog', back_populates='contact') location: Mapped[Optional['Room']] = relationship('Room', back_populates='users') inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='owner') + photo: Mapped[Optional['Photo']] = relationship('Photo', back_populates='user') @property def full_name(self) -> str: