/
FlysAt
/
DataFoundry
Обзор
Документация
Войти
/
FlysAt
/
DataFoundry
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/src/chat/models.py
87 строк
3 KB
AlexanderShmygol
fixed fullname param
16 май 2026, 17:24
16 май 2026, 17:24
aeff8a6
Код
Авторство
О чём код?
from datetime import datetime from sqlalchemy import DateTime, ForeignKey, String, Text, UniqueConstraint from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.sql import func from src.models.base import Base class ChatConversation(Base): __tablename__ = "chat_conversation" __table_args__ = ( UniqueConstraint("user_low_id", "user_high_id", name="uq_chat_conversation_pair"), ) id: Mapped[int] = mapped_column(primary_key=True, index=True) user_low_id: Mapped[int] = mapped_column( ForeignKey("user.id", ondelete="CASCADE"), nullable=False, index=True, ) user_high_id: Mapped[int] = mapped_column( ForeignKey("user.id", ondelete="CASCADE"), nullable=False, index=True, ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, ) user_low = relationship("User", foreign_keys=[user_low_id]) user_high = relationship("User", foreign_keys=[user_high_id]) messages = relationship( "ChatMessage", back_populates="conversation", cascade="all, delete-orphan", ) class ChatMessage(Base): __tablename__ = "chat_message" id: Mapped[int] = mapped_column(primary_key=True, index=True) conversation_id: Mapped[int] = mapped_column( ForeignKey("chat_conversation.id", ondelete="CASCADE"), nullable=False, index=True, ) sender_id: Mapped[int] = mapped_column( ForeignKey("user.id", ondelete="CASCADE"), nullable=False, index=True, ) recipient_id: Mapped[int] = mapped_column( ForeignKey("user.id", ondelete="CASCADE"), nullable=False, index=True, ) client_message_id: Mapped[str | None] = mapped_column(String(128), nullable=True) text: Mapped[str] = mapped_column(Text, nullable=False) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False, ) delivered_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) read_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) conversation = relationship("ChatConversation", back_populates="messages") sender = relationship("User", foreign_keys=[sender_id]) recipient = relationship("User", foreign_keys=[recipient_id]) @property def sender_full_name(self) -> str | None: return self.sender.full_name if self.sender else None @property def recipient_full_name(self) -> str | None: return self.recipient.full_name if self.recipient else None