from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey from sqlalchemy.orm import relationship from datetime import datetime from database import Base class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String, unique=True, nullable=False, index=True) pin_hash = Column(String, nullable=False) role = Column(String, nullable=False) # 'waiter' | 'manager' | 'sysadmin' is_active = Column(Boolean, default=True, nullable=False) created_at = Column(DateTime, default=datetime.utcnow) orders_opened = relationship("Order", foreign_keys="Order.opened_by", back_populates="opener") orders_closed = relationship("Order", foreign_keys="Order.closed_by", back_populates="closer") order_items = relationship("OrderItem", back_populates="added_by_user") order_assignments = relationship("OrderWaiter", back_populates="waiter") primary_assignments = relationship( "AssistantAssignment", foreign_keys="AssistantAssignment.primary_waiter_id", back_populates="primary_waiter", ) assistant_assignments = relationship( "AssistantAssignment", foreign_keys="AssistantAssignment.assistant_waiter_id", back_populates="assistant_waiter", ) class AssistantAssignment(Base): __tablename__ = "assistant_assignments" id = Column(Integer, primary_key=True, index=True) primary_waiter_id = Column(Integer, ForeignKey("users.id"), nullable=False) assistant_waiter_id = Column(Integer, ForeignKey("users.id"), nullable=False) assigned_at = Column(DateTime, default=datetime.utcnow) primary_waiter = relationship("User", foreign_keys=[primary_waiter_id], back_populates="primary_assignments") assistant_waiter = relationship("User", foreign_keys=[assistant_waiter_id], back_populates="assistant_assignments")