| """SQLAlchemy database models.""" |
|
|
| from uuid import uuid4 |
| from sqlalchemy import Column, String, DateTime, Text, Integer, ForeignKey |
| from sqlalchemy.orm import relationship |
| from sqlalchemy.sql import func |
| from src.db.postgres.connection import Base |
|
|
|
|
| class User(Base): |
| """User model.""" |
| __tablename__ = "users" |
|
|
| id = Column(String, primary_key=True, default=lambda: str(uuid4())) |
| fullname = Column(String, nullable=False) |
| email = Column(String, nullable=False, unique=True, index=True) |
| password = Column(String, nullable=False) |
| company = Column(String) |
| company_size = Column(String) |
| function = Column(String) |
| site = Column(String) |
| role = Column(String) |
| status = Column(String, nullable=False, default="active") |
| created_at = Column(DateTime(timezone=True), server_default=func.now()) |
|
|
|
|
| class Document(Base): |
| """Document model.""" |
| __tablename__ = "documents" |
|
|
| id = Column(String, primary_key=True, default=lambda: str(uuid4())) |
| user_id = Column(String, nullable=False, index=True) |
| filename = Column(String, nullable=False) |
| blob_name = Column(String, nullable=False, unique=True) |
| file_size = Column(Integer) |
| file_type = Column(String) |
| status = Column(String, default="uploaded") |
| processed_at = Column(DateTime(timezone=True)) |
| error_message = Column(Text) |
| created_at = Column(DateTime(timezone=True), server_default=func.now()) |
|
|
|
|
| class Room(Base): |
| """Room model for chat sessions.""" |
| __tablename__ = "rooms" |
|
|
| id = Column(String, primary_key=True, default=lambda: str(uuid4())) |
| user_id = Column(String, nullable=False, index=True) |
| title = Column(String, default="New Chat") |
| created_at = Column(DateTime(timezone=True), server_default=func.now()) |
| updated_at = Column(DateTime(timezone=True), onupdate=func.now()) |
|
|
| status = Column(String, nullable=False, default="active") |
|
|
| messages = relationship("ChatMessage", back_populates="room", cascade="all, delete-orphan") |
|
|
|
|
| class ChatMessage(Base): |
| """Chat message model.""" |
| __tablename__ = "chat_messages" |
|
|
| id = Column(String, primary_key=True, default=lambda: str(uuid4())) |
| room_id = Column(String, ForeignKey("rooms.id"), nullable=False, index=True) |
| role = Column(String, nullable=False) |
| content = Column(Text, nullable=False) |
| created_at = Column(DateTime(timezone=True), server_default=func.now()) |
|
|
| room = relationship("Room", back_populates="messages") |
|
|