from uuid import uuid4 from sqlalchemy import Column as sql_Column from sqlalchemy import DateTime as sql_DateTime from sqlalchemy import ForeignKey as sql_ForeignKey from sqlalchemy import Integer as sql_Integer from sqlalchemy import String as sql_String from sqlalchemy import Uuid as sql_Uuid from sqlalchemy.orm import relationship as sql_relationship from sqlalchemy.sql.functions import now as sql_now from .database import Base as db_Base class Item(db_Base): __tablename__ = "items" uuid = sql_Column(sql_Uuid, primary_key=True, default=uuid4) amount = sql_Column(sql_Integer, default=1) received_amount = sql_Column(sql_Integer, nullable=True, default=None) created_at = sql_Column(sql_DateTime(timezone=True), server_default=sql_now()) received_at = sql_Column(sql_DateTime(timezone=True), nullable=True, default=None) addressee = sql_Column(sql_String(64), nullable=True, default=None) team = sql_Column(sql_String(16), nullable=True, default=None) images = sql_relationship("Image", back_populates="item") deployed = sql_Column(sql_String(64), nullable=True, default=None) deployed_at = sql_Column(sql_DateTime(timezone=True), nullable=True, default=None) verification = sql_Column(sql_String(114), nullable=True, default=None) tag = sql_Column(sql_String(6), nullable=True, default=None) storage = sql_Column( sql_String(16), sql_ForeignKey("store.name"), nullable=True, default=None ) stored_at = sql_relationship("Storage", back_populates="items") class Storage(db_Base): __tablename__ = "store" name = sql_Column(sql_String(16), primary_key=True) items = sql_relationship("Item", back_populates="stored_at") class Image(db_Base): __tablename__ = "images" uuid = sql_Column(sql_Uuid, primary_key=True, default=uuid4) item_uuid = sql_Column(sql_Uuid, sql_ForeignKey("items.uuid")) item = sql_relationship("Item", back_populates="images")