from datetime import datetime from enum import Enum as PyEnum from sqlalchemy import Boolean, Column, DateTime, Enum, ForeignKey, Integer, String from sqlalchemy.orm import relationship from app.db.base import Base class TicketStatus(str, PyEnum): ACTIVE = "active" USED = "used" CANCELLED = "cancelled" EXPIRED = "expired" class Ticket(Base): __tablename__ = "tickets" id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("users.id")) schedule_id = Column(Integer, ForeignKey("schedules.id")) seat_number = Column(String, nullable=True) # Seat number is only required for trains purchase_time = Column(DateTime, default=datetime.utcnow) status = Column(Enum(TicketStatus), default=TicketStatus.ACTIVE) is_active = Column(Boolean, default=True) ticket_number = Column(String, unique=True, index=True) # Relationships user = relationship("User", back_populates="tickets") schedule = relationship("Schedule", back_populates="tickets") def __repr__(self): return f"Ticket(id={self.id}, user={self.user_id}, schedule={self.schedule_id}, status={self.status})"