FilozofMuhendis
Initial model upload - Industrial Cost Calculation Chatbot
8223b74 verified
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) # 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"<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) # 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"<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) # 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"<Document(id={self.id}, filename='{self.filename}', uploaded_at={self.uploaded_at})>"