from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey from sqlalchemy.sql import func from .database import Base class Drug(Base): __tablename__ = "drugs" id = Column(Integer, primary_key=True, index=True) name = Column(String, unique=True, index=True, nullable=False) description = Column(String, nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now(), server_default=func.now()) class DrugVariant(Base): __tablename__ = "drug_variants" id = Column(Integer, primary_key=True, index=True) drug_id = Column(Integer, ForeignKey("drugs.id"), nullable=False) strength = Column(String, nullable=False) # e.g., "5.4mg", "16mg", "100ml" quantity = Column(Float, nullable=False, default=0) unit = Column(String, nullable=False, default="units") # tablets, bottles, ml, etc low_stock_threshold = Column(Float, nullable=False, default=10) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now(), server_default=func.now()) class Dispensing(Base): __tablename__ = "dispensings" id = Column(Integer, primary_key=True, index=True) drug_variant_id = Column(Integer, ForeignKey("drug_variants.id"), nullable=False) quantity = Column(Float, nullable=False) animal_name = Column(String, nullable=False) # Name/ID of the animal user_name = Column(String, nullable=False) # User who dispensed dispensed_at = Column(DateTime(timezone=True), server_default=func.now(), index=True) notes = Column(String, nullable=True)