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') 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') 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')) content: Mapped[str] chat: Mapped[MPChat] = relationship() sender: Mapped[MPProfile] = relationship() 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'))