GMtracker / app /models.py
pramodmisra's picture
Create app/models.py
e2daa68 verified
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Enum as SQLEnum
from sqlalchemy.orm import relationship
from datetime import datetime
from app.database import Base
import enum
class ItemType(str, enum.Enum):
GROCERY = "grocery"
MEDICATION = "medication"
SUPPLEMENT = "supplement"
class InventoryStatus(str, enum.Enum):
NORMAL = "normal"
LOW = "low"
OUT = "out"
class UserMedicationProfile(Base):
__tablename__ = "user_medication_profiles"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(String, index=True, default="default_user")
allergies = Column(String, nullable=True)
dose_events = relationship("DoseEvent", back_populates="profile")
medication_items = relationship("MedicationItem", back_populates="profile")
class DoseEvent(Base):
__tablename__ = "dose_events"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(String, index=True, default="default_user")
profile_id = Column(Integer, ForeignKey("user_medication_profiles.id"))
item_name = Column(String, index=True)
amount_mg = Column(Float)
timestamp = Column(DateTime, default=datetime.utcnow)
source = Column(String, default="manual")
profile = relationship("UserMedicationProfile", back_populates="dose_events")
class MedicationItem(Base):
__tablename__ = "medication_items"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(String, index=True, default="default_user")
profile_id = Column(Integer, ForeignKey("user_medication_profiles.id"))
display_name = Column(String, index=True)
strength = Column(String, nullable=True)
form = Column(String, nullable=True)
indication_plain = Column(String, nullable=True)
instructions_plain = Column(String, nullable=True)
warnings_plain = Column(String, nullable=True)
barcode = Column(String, nullable=True)
last_reviewed = Column(DateTime, default=datetime.utcnow)
max_daily_dose_mg = Column(Float, nullable=True)
profile = relationship("UserMedicationProfile", back_populates="medication_items")
inventory_links = relationship("InventoryItem", back_populates="linked_item")
class InventoryItem(Base):
__tablename__ = "inventory_items"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(String, index=True, default="default_user")
name = Column(String, index=True)
type = Column(SQLEnum(ItemType), default=ItemType.GROCERY)
linked_item_id = Column(Integer, ForeignKey("medication_items.id"), nullable=True)
quantity_estimate = Column(Integer, default=1)
last_purchased_at = Column(DateTime, default=datetime.utcnow)
status = Column(SQLEnum(InventoryStatus), default=InventoryStatus.NORMAL)
linked_item = relationship("MedicationItem", back_populates="inventory_links")