mp_message/core/models/message/db.py

41 lines
1.7 KiB
Python
Raw Normal View History

from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import mapped_column, Mapped, relationship
from database import Base
class MPProfile(Base):
__tablename__ = 'mp_profile'
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
external_id: Mapped[int] = mapped_column(unique=True)
chats: Mapped[list['MPChat']] = relationship('MPChat', secondary='mp_chat_user')
messages: Mapped[list['MPMessage']] = relationship('MPMessage', back_populates='sender')
class MPChat(Base):
__tablename__ = 'mp_chat'
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
name: Mapped[str | None]
admin_id: Mapped[int] = mapped_column(ForeignKey('mp_profile.id'))
admin: Mapped[MPProfile] = relationship()
users: Mapped[list[MPProfile]] = relationship('MPProfile', secondary='mp_chat_user')
messages: Mapped[list['MPMessage']] = relationship('MPMessage', back_populates='chat')
class MPMessage(Base):
__tablename__ = 'mp_message'
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
sender_id: Mapped[int] = mapped_column(ForeignKey('mp_profile.id'))
chat_id: Mapped[int] = mapped_column(ForeignKey('mp_chat.id', ondelete='CASCADE'))
content: Mapped[str]
chat: Mapped[MPChat] = relationship("MPChat", back_populates="messages")
sender: Mapped[MPProfile] = relationship("MPProfile", back_populates="messages")
class MPChatUser(Base):
__tablename__ = 'mp_chat_user'
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
user_id: Mapped[int] = mapped_column(ForeignKey('mp_profile.id', ondelete='CASCADE'))
chat_id: Mapped[int] = mapped_column(ForeignKey('mp_chat.id', ondelete='CASCADE'))