feat: client endpoints for clients page

This commit is contained in:
2025-10-04 18:12:13 +04:00
parent 66b50fb951
commit 986712d5b7
12 changed files with 268 additions and 0 deletions

View File

@ -0,0 +1 @@
from .client import Client as Client, ClientDetails as ClientDetails

View File

@ -0,0 +1,51 @@
from datetime import datetime
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(
nullable=False,
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()