| | 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"<LaborRate(job_type='{self.job_type}', hourly_rate={self.hourly_rate})>" |
| |
|
| | 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) |
| | 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"<Material(name='{self.name}', unit='{self.unit}', unit_price={self.unit_price})>" |
| |
|
| | 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) |
| | created_at = Column(DateTime(timezone=True), server_default=func.now()) |
| | updated_at = Column(DateTime(timezone=True), onupdate=func.now()) |
| |
|
| | def __repr__(self): |
| | return f"<MarginProfile(profile_name='{self.profile_name}', margin_percentage={self.margin_percentage})>" |
| |
|
| | 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"<ChatHistory(id={self.id}, created_at={self.created_at})>" |
| |
|
| | 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) |
| | file_size = Column(Integer, nullable=False) |
| | content_text = Column(Text, nullable=True) |
| | analysis_result = Column(Text, nullable=True) |
| | document_type = Column(String, nullable=True) |
| | template_type = Column(String, nullable=True) |
| | uploaded_at = Column(DateTime(timezone=True), server_default=func.now()) |
| | analyzed_at = Column(DateTime(timezone=True), nullable=True) |
| |
|
| | def __repr__(self): |
| | return f"<Document(id={self.id}, filename='{self.filename}', uploaded_at={self.uploaded_at})>" |