This commit is contained in:
2024-03-17 00:22:05 +03:00
parent f5b7420fac
commit aafa1050a7
8 changed files with 153 additions and 13 deletions

View File

@@ -1,9 +1,11 @@
import datetime
from typing import Union
from typing import Union, Annotated
from sqlalchemy import select
from fastapi import Depends
from sqlalchemy import select, update
from models import Client
from models import Client, ClientDetails, User
from services.auth import get_current_user
from services.base import BaseService
from schemas.client import *
@@ -14,10 +16,51 @@ class ClientService(BaseService):
client = await self.session.scalar(select(Client).where(Client.name == name))
return client
async def create_client_raw(self, name: str, address: str) -> Client:
client = Client(name=name, address=address, created_at=datetime.datetime.now())
async def get_by_id(self, client_id: int) -> Union[Client, None]:
return await self.session.get(Client, client_id)
async def get_details_by_client_id(self, client_id: int) -> Union[ClientDetails, None]:
details = await self.session.scalar(select(ClientDetails).where(ClientDetails.client_id == client_id))
return details
async def get_all(self) -> ClientGetAllResponse:
clients_query = await self.session.scalars(select(Client))
clients = clients_query.all()
result = []
for client in clients:
result.append(ClientSchema.model_validate(client))
return ClientGetAllResponse(clients=result)
async def create_details(self, user, client: Client, request: ClientDetailsSchema):
dict_data = request.dict()
dict_data['client_id'] = client.id
dict_data['last_modified_at'] = datetime.datetime.now()
dict_data['modified_by_user_id'] = user.id
details = ClientDetails(**dict_data)
self.session.add(details)
await self.session.flush()
return details
async def update_details(self, user: User, client: Client, request: ClientDetailsSchema) -> ClientDetails:
details = await self.get_details_by_client_id(client_id=client.id)
if not details:
details = await self.create_details(user, client, request)
dict_data = request.dict()
dict_data['last_modified_at'] = datetime.datetime.now()
dict_data['modified_by_user_id'] = user.id
await self.session.execute(update(ClientDetails).where(ClientDetails.id == details.id).values(**dict_data))
await self.session.flush()
async def create_client_raw(self,
user: User,
client_name: str,
details_schema: ClientDetailsSchema) -> Client:
client = Client(name=client_name, created_at=datetime.datetime.now())
self.session.add(client)
await self.session.flush()
await self.update_details(user, client, details_schema)
return client
async def search_clients(self, request: ClientSearchRequest) -> ClientSearchResponse: