from typing import TYPE_CHECKING, Optional from sqlalchemy import ForeignKey, Table, Column from sqlalchemy.orm import mapped_column, Mapped, relationship from models import BaseModel from models import GroupBillRequest if TYPE_CHECKING: from models import Card class CardGroup(BaseModel): __tablename__ = 'card_groups' id: Mapped[int] = mapped_column( primary_key=True ) name: Mapped[Optional[str]] = mapped_column( nullable=True ) lexorank: Mapped[str] = mapped_column( nullable=False ) cards: Mapped[list["Card"]] = relationship( back_populates='group', secondary='card_relations' ) bill_requests: Mapped[list['GroupBillRequest']] = relationship( back_populates='group', lazy='joined', uselist=True, ) card_relations = Table( 'card_relations', BaseModel.metadata, Column('card_id', ForeignKey('cards.id'), primary_key=True, unique=True), Column('group_id', ForeignKey('card_groups.id'), primary_key=True) )