from typing import Optional, TYPE_CHECKING from sqlalchemy import ForeignKey from sqlalchemy.orm import relationship, Mapped, mapped_column from models.base import BaseModel from models.mixins import IdMixin, CreatedAtMixin, SoftDeleteMixin, LastModifiedAtMixin if TYPE_CHECKING: from models import Product class Client(BaseModel, IdMixin, CreatedAtMixin, SoftDeleteMixin): __tablename__ = "clients" name: Mapped[str] = mapped_column(unique=True, comment="Название клиента") company_name: Mapped[str] = mapped_column(comment="Название компании") products: Mapped[list["Product"]] = relationship( back_populates="client", lazy="noload" ) details: Mapped["ClientDetails"] = relationship( uselist=False, back_populates="client", cascade="all, delete", lazy="joined", ) comment: Mapped[Optional[str]] = mapped_column(comment="Комментарий") class ClientDetails(BaseModel, IdMixin, LastModifiedAtMixin): __tablename__ = "client_details" client_id: Mapped[int] = mapped_column( ForeignKey("clients.id"), unique=True, comment="ID клиента" ) client: Mapped[Client] = relationship( back_populates="details", cascade="all, delete", uselist=False ) telegram: Mapped[Optional[str]] = mapped_column() phone_number: Mapped[Optional[str]] = mapped_column() inn: Mapped[Optional[str]] = mapped_column() email: Mapped[Optional[str]] = mapped_column()