""" Chat models for the application. """ from datetime import datetime from app.database.db import db class Chat(db.Model): """Chat model representing a chat session.""" __tablename__ = 'chats' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=True) is_team_chat = db.Column(db.Boolean, default=False) model_name = db.Column(db.String(50), nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # Foreign keys user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) # Relationships messages = db.relationship('Message', backref='chat', lazy='dynamic', cascade='all, delete-orphan') team_members = db.relationship('TeamChatMember', backref='chat', lazy='dynamic', cascade='all, delete-orphan') def __repr__(self): return f'' class Message(db.Model): """Message model representing a single message in a chat.""" __tablename__ = 'messages' id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text, nullable=False) is_user_message = db.Column(db.Boolean, default=True) created_at = db.Column(db.DateTime, default=datetime.utcnow) # Foreign keys chat_id = db.Column(db.Integer, db.ForeignKey('chats.id'), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True) def __repr__(self): return f'' class TeamChatMember(db.Model): """Model representing a member of a team chat.""" __tablename__ = 'team_chat_members' id = db.Column(db.Integer, primary_key=True) joined_at = db.Column(db.DateTime, default=datetime.utcnow) # Foreign keys chat_id = db.Column(db.Integer, db.ForeignKey('chats.id'), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) # Ensure a user can only be added to a team chat once __table_args__ = ( db.UniqueConstraint('chat_id', 'user_id', name='uq_team_chat_member'), ) def __repr__(self): return f''