Add Photo model and establish relationships with Inventory and User; create worklog_photos association table
This commit is contained in:
parent
54efd370ff
commit
2a8e1710b3
4 changed files with 38 additions and 2 deletions
|
@ -4,6 +4,7 @@ if TYPE_CHECKING:
|
||||||
from .items import Item
|
from .items import Item
|
||||||
from .work_log import WorkLog
|
from .work_log import WorkLog
|
||||||
from .rooms import Room
|
from .rooms import Room
|
||||||
|
from .photo import Photo
|
||||||
|
|
||||||
from sqlalchemy import Boolean, ForeignKey, Identity, Index, Integer, Unicode, DateTime, text
|
from sqlalchemy import Boolean, ForeignKey, Identity, Index, Integer, Unicode, DateTime, text
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||||
|
@ -27,16 +28,17 @@ class Inventory(db.Model):
|
||||||
notes: Mapped[Optional[str]] = mapped_column(Unicode(255))
|
notes: Mapped[Optional[str]] = mapped_column(Unicode(255))
|
||||||
owner_id = mapped_column(Integer, ForeignKey('users.id'))
|
owner_id = mapped_column(Integer, ForeignKey('users.id'))
|
||||||
brand_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("brand.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"))
|
location_id: Mapped[Optional[str]] = mapped_column(ForeignKey("rooms.id"))
|
||||||
barcode: Mapped[Optional[str]] = mapped_column(Unicode(255))
|
barcode: Mapped[Optional[str]] = mapped_column(Unicode(255))
|
||||||
shared: Mapped[Optional[bool]] = mapped_column(Boolean, server_default=text('((0))'))
|
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')
|
location: Mapped[Optional['Room']] = relationship('Room', back_populates='inventory')
|
||||||
owner = relationship('User', back_populates='inventory')
|
owner = relationship('User', back_populates='inventory')
|
||||||
brand: Mapped[Optional['Brand']] = relationship('Brand', back_populates='inventory')
|
brand: Mapped[Optional['Brand']] = relationship('Brand', back_populates='inventory')
|
||||||
item: Mapped['Item'] = relationship('Item', back_populates='inventory')
|
item: Mapped['Item'] = relationship('Item', back_populates='inventory')
|
||||||
work_logs: Mapped[List['WorkLog']] = relationship('WorkLog', back_populates='work_item')
|
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,
|
def __init__(self, timestamp: datetime.datetime, condition: str, type_id: Optional[int] = None,
|
||||||
name: Optional[str] = None, serial: Optional[str] = None,
|
name: Optional[str] = None, serial: Optional[str] = None,
|
||||||
|
|
25
inventory/models/photo.py
Normal file
25
inventory/models/photo.py
Normal file
|
@ -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"<Photo(id={self.id}, filename={self.filename})>"
|
7
inventory/models/photo_links.py
Normal file
7
inventory/models/photo_links.py
Normal file
|
@ -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),
|
||||||
|
)
|
|
@ -3,6 +3,7 @@ if TYPE_CHECKING:
|
||||||
from .inventory import Inventory
|
from .inventory import Inventory
|
||||||
from .rooms import Room
|
from .rooms import Room
|
||||||
from .work_log import WorkLog
|
from .work_log import WorkLog
|
||||||
|
from .photo import Photo
|
||||||
|
|
||||||
from sqlalchemy import Boolean, ForeignKey, Identity, Integer, Unicode, text
|
from sqlalchemy import Boolean, ForeignKey, Identity, Integer, Unicode, text
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
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)
|
first_name: Mapped[Optional[str]] = mapped_column(Unicode(255), nullable=True)
|
||||||
location_id: Mapped[Optional[int]] = mapped_column(ForeignKey("rooms.id"), 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"))
|
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')
|
supervisor: Mapped[Optional['User']] = relationship('User', remote_side='User.id', back_populates='subordinates')
|
||||||
subordinates: Mapped[List['User']] = relationship('User', back_populates='supervisor')
|
subordinates: Mapped[List['User']] = relationship('User', back_populates='supervisor')
|
||||||
|
|
||||||
work_logs: Mapped[List['WorkLog']] = relationship('WorkLog', back_populates='contact')
|
work_logs: Mapped[List['WorkLog']] = relationship('WorkLog', back_populates='contact')
|
||||||
location: Mapped[Optional['Room']] = relationship('Room', back_populates='users')
|
location: Mapped[Optional['Room']] = relationship('Room', back_populates='users')
|
||||||
inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='owner')
|
inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='owner')
|
||||||
|
photo: Mapped[Optional['Photo']] = relationship('Photo', back_populates='user')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def full_name(self) -> str:
|
def full_name(self) -> str:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue