from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Text, LargeBinary from sqlalchemy.orm import relationship from sqlalchemy.sql import func from .database import Base class LaborRate(Base): """Model for labor rates by job type""" __tablename__ = "labor_rates" id = Column(Integer, primary_key=True, index=True) job_type = Column(String, unique=True, index=True, nullable=False) hourly_rate = Column(Float, nullable=False) currency = Column(String, default="TRY") created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) def __repr__(self): return f"" class Material(Base): """Model for materials and their unit prices""" __tablename__ = "materials" id = Column(Integer, primary_key=True, index=True) name = Column(String, index=True, nullable=False) unit = Column(String, nullable=False) # e.g., kg, meter, piece unit_price = Column(Float, nullable=False) currency = Column(String, default="TRY") created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) def __repr__(self): return f"" class MarginProfile(Base): """Model for margin profiles by project type""" __tablename__ = "margin_profiles" id = Column(Integer, primary_key=True, index=True) profile_name = Column(String, unique=True, index=True, nullable=False) margin_percentage = Column(Float, nullable=False) # Stored as decimal (e.g., 0.15 for 15%) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) def __repr__(self): return f"" class ChatHistory(Base): """Model for storing chat history""" __tablename__ = "chat_history" id = Column(Integer, primary_key=True, index=True) user_input = Column(String, nullable=False) assistant_response = Column(String, nullable=False) created_at = Column(DateTime(timezone=True), server_default=func.now()) def __repr__(self): return f"" class Document(Base): """Model for storing uploaded documents""" __tablename__ = "documents" id = Column(Integer, primary_key=True, index=True) filename = Column(String, nullable=False) content_type = Column(String, nullable=False) file_path = Column(String, nullable=False) # Path to stored file file_size = Column(Integer, nullable=False) # Size in bytes content_text = Column(Text, nullable=True) # Extracted text content analysis_result = Column(Text, nullable=True) # Analysis results in JSON format document_type = Column(String, nullable=True) # Type of document (uploaded, generated) template_type = Column(String, nullable=True) # Template type for generated documents uploaded_at = Column(DateTime(timezone=True), server_default=func.now()) analyzed_at = Column(DateTime(timezone=True), nullable=True) def __repr__(self): return f""