MukeshKapoor25's picture
feat(staff): Add dependency injection and enforce merchant_id from authentication token
edd1bb3
"""
PostgreSQL reference models for POS sync.
"""
from sqlalchemy import Column, String, DateTime, Text, Boolean, Float, Integer, JSON, ARRAY
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql import func
from datetime import datetime
Base = declarative_base()
class CustomerRef(Base):
"""PostgreSQL reference table for customers"""
__tablename__ = "customer_ref"
__table_args__ = {"schema": "trans"}
customer_id = Column(String, primary_key=True)
merchant_id = Column(String, nullable=False, index=True)
name = Column(String(150), nullable=False)
phone = Column(String(20), nullable=True, index=True)
email = Column(String(255), nullable=True, index=True)
notes = Column(Text, nullable=True)
status = Column(String(20), nullable=False, default="active")
created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
class StaffRef(Base):
"""PostgreSQL reference table for staff"""
__tablename__ = "pos_staff_ref"
__table_args__ = {"schema": "trans"}
staff_id = Column(String, primary_key=True)
merchant_id = Column(String, nullable=False, index=True)
name = Column(String(150), nullable=False)
phone = Column(String(20), nullable=True)
email = Column(String(255), nullable=True)
role = Column(String(50), nullable=True)
specializations = Column(ARRAY(String), nullable=True)
status = Column(String(20), nullable=False, default="active")
created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
class CatalogueServiceRef(Base):
"""PostgreSQL reference table for catalogue services"""
__tablename__ = "catalogue_service_ref"
__table_args__ = {"schema": "trans"}
service_id = Column(String, primary_key=True)
merchant_id = Column(String, nullable=False, index=True)
service_name = Column(String(200), nullable=False)
service_code = Column(String(50), nullable=False, index=True)
category_id = Column(String, nullable=True)
category_name = Column(String(100), nullable=True)
description = Column(Text, nullable=True)
duration_mins = Column(Integer, nullable=False, default=30)
price = Column(Float, nullable=False, default=0.0)
currency = Column(String(3), nullable=False, default="INR")
gst_rate = Column(Float, nullable=False, default=18.0)
status = Column(String(20), nullable=False, default="active")
sort_order = Column(Integer, nullable=False, default=0)
pricing = Column(JSON, nullable=True) # Store full pricing JSON
category = Column(JSON, nullable=True) # Store full category JSON
created_at = Column(DateTime, nullable=False, default=datetime.utcnow)
updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)