from sqlalchemy import Boolean, Column, DateTime, Float, ForeignKey, Integer, String, Text, UniqueConstraint from sqlalchemy.sql import func from app.db.mock_database import MockBase class Vehicle(MockBase): __tablename__ = "vehicles" id = Column(Integer, primary_key=True, index=True) modelo = Column(String(120), nullable=False) categoria = Column(String(50), nullable=False, index=True) preco = Column(Float, nullable=False, index=True) created_at = Column(DateTime, server_default=func.current_timestamp()) class Customer(MockBase): __tablename__ = "customers" id = Column(Integer, primary_key=True, index=True) cpf = Column(String(11), unique=True, nullable=False, index=True) nome = Column(String(120), nullable=False) score = Column(Integer, nullable=False) limite_credito = Column(Float, nullable=False) possui_restricao = Column(Boolean, nullable=False, default=False) created_at = Column(DateTime, server_default=func.current_timestamp()) class User(MockBase): __tablename__ = "users" __table_args__ = ( UniqueConstraint("channel", "external_id", name="uq_mock_users_channel_external_id"), ) id = Column(Integer, primary_key=True, index=True) channel = Column(String(40), nullable=False, index=True) external_id = Column(String(120), nullable=False, index=True) name = Column(String(120), nullable=True) username = Column(String(120), nullable=True) cpf = Column(String(11), ForeignKey("customers.cpf"), nullable=True, index=True) phone = Column(String(30), nullable=True) created_at = Column(DateTime, server_default=func.current_timestamp()) updated_at = Column( DateTime, server_default=func.current_timestamp(), onupdate=func.current_timestamp(), ) class Order(MockBase): __tablename__ = "orders" id = Column(Integer, primary_key=True, index=True) numero_pedido = Column(String(40), unique=True, nullable=False, index=True) user_id = Column(Integer, ForeignKey("users.id"), nullable=True, index=True) cpf = Column(String(11), ForeignKey("customers.cpf"), nullable=False, index=True) status = Column(String(20), nullable=False, default="Ativo") motivo_cancelamento = Column(Text, nullable=True) data_cancelamento = Column(DateTime, nullable=True) created_at = Column(DateTime, server_default=func.current_timestamp()) updated_at = Column( DateTime, server_default=func.current_timestamp(), onupdate=func.current_timestamp(), ) class ReviewSchedule(MockBase): __tablename__ = "review_schedules" id = Column(Integer, primary_key=True, index=True) protocolo = Column(String(50), unique=True, nullable=False, index=True) user_id = Column(Integer, ForeignKey("users.id"), nullable=True, index=True) placa = Column(String(10), nullable=False, index=True) data_hora = Column(DateTime, nullable=False) status = Column(String(20), nullable=False, default="agendado") created_at = Column(DateTime, server_default=func.current_timestamp())