From 85492a31e80dd2f6622b9a6b8b97b264709a2b95 Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Fri, 18 Jul 2025 19:28:08 +0400 Subject: [PATCH] fix: client delete fix --- models/client.py | 5 +++++ schemas/client.py | 1 + services/client.py | 15 ++++++++++----- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/models/client.py b/models/client.py index 74a8ad7..820c55a 100644 --- a/models/client.py +++ b/models/client.py @@ -22,6 +22,11 @@ class Client(BaseModel): ) created_at: Mapped[datetime] = mapped_column(nullable=False, comment='Дата создания') + is_deleted: Mapped[bool] = mapped_column( + nullable=False, + default=False, + server_default='0', + ) products: Mapped[list['Product']] = relationship('Product', back_populates='client') details: Mapped['ClientDetails'] = relationship( diff --git a/schemas/client.py b/schemas/client.py index 2fbcdef..1fbd6ac 100644 --- a/schemas/client.py +++ b/schemas/client.py @@ -28,6 +28,7 @@ class ClientSchema(BaseSchema): comment: Optional[str] = None details: ClientDetailsSchema | None = None chat: ChatSchema | None = None + is_deleted: bool | None = False class ClientDetailedSchema(ClientSchema): diff --git a/services/client.py b/services/client.py index fa61fe5..2bdd006 100644 --- a/services/client.py +++ b/services/client.py @@ -5,7 +5,7 @@ from fastapi import HTTPException from sqlalchemy import select, update from sqlalchemy.orm import joinedload, selectinload, noload -from models import Client, ClientDetails, User, ResidualPallet, ResidualBox, ResidualProduct, Product +from models import Client, ClientDetails, User, ResidualPallet, ResidualBox, ResidualProduct, Product, Card from schemas.client import * from services.auth import AuthService from services.base import BaseService @@ -100,9 +100,14 @@ class ClientService(BaseService): return client async def search_clients(self, request: ClientSearchRequest) -> ClientSearchResponse: - query = await self.session.scalars(select(Client) - .where(Client.name.ilike(f'%{request.name}%')) - .options(joinedload(Client.details))) + query = await self.session.scalars( + select(Client) + .where( + Client.name.ilike(f'%{request.name}%'), + Client.is_deleted == False, + ) + .options(joinedload(Client.details)) + ) clients = [] for client in query.all(): clients.append(ClientSchema.model_validate(client)) @@ -161,7 +166,7 @@ class ClientService(BaseService): client = await self._get_by_id(request.client_id) if not client: return ClientDeleteResponse(ok=False, message='Клиент не найден') - await self.session.delete(client) + client.is_deleted = True await self.session.commit() return ClientDeleteResponse(ok=True, message='Клиент удален') except Exception as e: