from sqlalchemy import Column, Integer, String, Date, ForeignKey, DECIMAL from sqlalchemy.orm import relationship from sqlalchemy.orm.collections import InstrumentedList from wrolpi.common import Base, ModelHelper from wrolpi.dates import now, TZDateTime class Item(Base, ModelHelper): __tablename__ = 'item' id = Column(Integer, primary_key=True) brand = Column(String) category = Column(String) count = Column(DECIMAL) created_at = Column(TZDateTime, default=now) deleted_at = Column(TZDateTime) expiration_date = Column(Date) item_size = Column(DECIMAL) name = Column(String) purchase_date = Column(Date) serving = Column(Integer) subcategory = Column(String) unit = Column(String) inventory_id = Column(Integer, ForeignKey('inventory.id')) inventory = relationship('Inventory', primaryjoin="Item.inventory_id==Inventory.id", back_populates='items') def __repr__(self): return f'' class Inventory(Base, ModelHelper): __tablename__ = 'inventory' id = Column(Integer, primary_key=True) name = Column(String, unique=True) viewed_at = Column(TZDateTime) created_at = Column(TZDateTime, default=now) deleted_at = Column(TZDateTime) items: InstrumentedList = relationship('Item', foreign_keys='Item.inventory_id') def __repr__(self): return f'' def dict(self): d = super().dict() d['items'] = [i.dict() for i in self.items] return d def delete(self): """ Delete all Items of this Inventory. Then delete this inventory. """ self.deleted_at = now() class InventoriesVersion(Base, ModelHelper): __tablename__ = 'inventories_version' version = Column(Integer, primary_key=True)