Files

48 lines
1.5 KiB
Python

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