Files
Crm-Backend/modules/clients/repositories/client.py

48 lines
1.6 KiB
Python

from datetime import timezone, datetime
from sqlalchemy import update
from modules.clients.models import Client, ClientDetails
from modules.clients.schemas.client import UpdateClientSchema, CreateClientSchema
from repositories.mixins import *
class ClientRepository(
BaseRepository,
RepGetAllMixin[Client],
RepDeleteMixin[Client],
RepUpdateMixin[Client, UpdateClientSchema],
RepGetByIdMixin[Client],
):
entity_class = Client
entity_not_found_msg = "Клиент не найден"
def _process_get_all_stmt(self, stmt: Select) -> Select:
return stmt.where(Client.is_deleted.is_(False)).order_by(Client.created_at)
async def create(self, data: CreateClientSchema) -> int:
details = ClientDetails(**data.details.model_dump())
data_dict = data.model_dump()
data_dict["details"] = details
client = Client(**data_dict)
self.session.add(client)
await self.session.commit()
await self.session.refresh(client)
return client.id
async def update(self, client: Client, data: UpdateClientSchema) -> Client:
if data.details is not None:
stmt = (
update(ClientDetails)
.where(ClientDetails.client_id == client.id)
.values(
**data.details.model_dump(),
last_modified_at=datetime.now(timezone.utc),
)
)
await self.session.execute(stmt)
del data.details
return await self._apply_update_data_to_model(client, data, True)