ifixkart-backend/app/models/POSTerminalModel.py

37 lines
1.7 KiB
Python

from sqlalchemy import Column, String, Integer, Float, DateTime, Text, ForeignKey
from sqlalchemy.orm import relationship
from datetime import datetime
from app.core.database.db_session import Base
class POSTerminal(Base):
__tablename__ = "pos_terminals"
__bind_key__ = "commerce"
terminal_id = Column(String(50), primary_key=True)
store_name = Column(String(150), nullable=False)
status = Column(String(20), default="ONLINE") # ONLINE, IDLE, OFFLINE
ip_address = Column(String(45), nullable=True)
last_heartbeat = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
synced_today = Column(Integer, default=0)
pending_queue = Column(Integer, default=0)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
logs = relationship("POSTransactionLog", back_populates="terminal", cascade="all, delete-orphan")
class POSTransactionLog(Base):
__tablename__ = "pos_transaction_logs"
__bind_key__ = "commerce"
sync_id = Column(String(50), primary_key=True)
terminal_id = Column(String(50), ForeignKey("pos_terminals.terminal_id"), nullable=False)
invoice_no = Column(String(100), nullable=False, index=True)
pos_transaction_id = Column(String(100), nullable=False, index=True)
items_count = Column(Integer, default=1)
total_amount = Column(Float, default=0.0)
status = Column(String(20), default="SYNCED") # SYNCED, FAILED, PENDING_RETRY
error_detail = Column(Text, nullable=True)
created_at = Column(DateTime, default=datetime.utcnow, index=True)
terminal = relationship("POSTerminal", back_populates="logs")