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'))