crappy
This commit is contained in:
@@ -1,14 +1,12 @@
|
||||
import datetime
|
||||
from typing import Union, Annotated
|
||||
from typing import Union
|
||||
|
||||
from fastapi import Depends
|
||||
from sqlalchemy import select, update
|
||||
from sqlalchemy.orm import joinedload
|
||||
|
||||
from models import Client, ClientDetails, User
|
||||
from services.auth import get_current_user
|
||||
from services.base import BaseService
|
||||
from schemas.client import *
|
||||
from services.base import BaseService
|
||||
|
||||
|
||||
class ClientService(BaseService):
|
||||
|
||||
100
services/deal.py
100
services/deal.py
@@ -1,6 +1,6 @@
|
||||
import models.secondary
|
||||
from typing import Union
|
||||
|
||||
import models.deal
|
||||
from fastapi import HTTPException
|
||||
from sqlalchemy import select, func
|
||||
from sqlalchemy.orm import joinedload, selectinload
|
||||
@@ -156,3 +156,101 @@ class DealService(BaseService):
|
||||
)
|
||||
await self.session.commit()
|
||||
return DealAddServicesResponse(ok=True, message='Услуги успешно добавлены')
|
||||
|
||||
async def get_all(self) -> DealGetAllResponse:
|
||||
deals_query = await self.session.scalars(select(Deal).options(joinedload(Deal.client)))
|
||||
deals = deals_query.all()
|
||||
result = []
|
||||
for deal in deals:
|
||||
result.append(DealSchema.model_validate(deal))
|
||||
return DealGetAllResponse(deals=result)
|
||||
|
||||
async def get_by_id(self, deal_id: int) -> DealSchema:
|
||||
deal = await self.session.scalar(
|
||||
select(Deal)
|
||||
.options(
|
||||
joinedload(Deal.client),
|
||||
selectinload(Deal.services)
|
||||
.joinedload(models.secondary.DealService.service)
|
||||
.joinedload(Service.category))
|
||||
.where(Deal.id == deal_id)
|
||||
)
|
||||
if not deal:
|
||||
raise HTTPException(status_code=404, detail="Сделка не найдена")
|
||||
return DealSchema.model_validate(deal)
|
||||
|
||||
async def update_service_quantity(self,
|
||||
request: DealUpdateServiceQuantityRequest) -> DealUpdateServiceQuantityResponse:
|
||||
try:
|
||||
deal_service = await self.session.scalar(
|
||||
select(models.secondary.DealService)
|
||||
.where(models.secondary.DealService.deal_id == request.deal_id,
|
||||
models.secondary.DealService.service_id == request.service_id)
|
||||
)
|
||||
if not deal_service:
|
||||
raise HTTPException(status_code=404, detail="Сделка не найдена")
|
||||
deal_service.quantity = request.quantity
|
||||
await self.session.commit()
|
||||
return DealUpdateServiceQuantityResponse(ok=True, message='Количество успешно обновлено')
|
||||
except Exception as e:
|
||||
await self.session.rollback()
|
||||
return DealUpdateServiceQuantityResponse(ok=False, message=str(e))
|
||||
|
||||
async def add_service(self, request: DealAddServiceRequest) -> DealAddServiceResponse:
|
||||
try:
|
||||
deal = await self.session.scalar(select(Deal).where(Deal.id == request.deal_id))
|
||||
if not deal:
|
||||
raise HTTPException(status_code=404, detail="Сделка не найдена")
|
||||
service = await self.session.scalar(select(Service).where(Service.id == request.service_id))
|
||||
if not service:
|
||||
raise HTTPException(status_code=404, detail="Услуга не найдена")
|
||||
# Preventing duplicates
|
||||
deal_service = await self.session.scalar(
|
||||
select(models.secondary.DealService)
|
||||
.where(models.secondary.DealService.deal_id == request.deal_id,
|
||||
models.secondary.DealService.service_id == request.service_id)
|
||||
)
|
||||
if deal_service:
|
||||
raise HTTPException(status_code=400, detail="Услуга уже добавлена")
|
||||
deal_service = models.secondary.DealService(
|
||||
deal_id=request.deal_id,
|
||||
service_id=request.service_id,
|
||||
quantity=request.quantity
|
||||
)
|
||||
self.session.add(deal_service)
|
||||
await self.session.commit()
|
||||
return DealAddServiceResponse(ok=True, message='Услуга успешно добавлена')
|
||||
except Exception as e:
|
||||
await self.session.rollback()
|
||||
return DealAddServiceResponse(ok=False, message=str(e))
|
||||
|
||||
async def delete_service(self, request: DealDeleteServiceRequest) -> DealDeleteServiceResponse:
|
||||
try:
|
||||
deal_service = await self.session.scalar(
|
||||
select(models.secondary.DealService)
|
||||
.where(models.secondary.DealService.deal_id == request.deal_id,
|
||||
models.secondary.DealService.service_id == request.service_id)
|
||||
)
|
||||
if not deal_service:
|
||||
raise HTTPException(status_code=404, detail="Сделка не найдена")
|
||||
await self.session.delete(deal_service)
|
||||
await self.session.commit()
|
||||
return DealDeleteServiceResponse(ok=True, message='Услуга успешно удалена')
|
||||
except Exception as e:
|
||||
await self.session.rollback()
|
||||
return DealDeleteServiceResponse(ok=False, message=str(e))
|
||||
|
||||
async def delete_services(self, request: DealDeleteServicesRequest) -> DealDeleteServicesResponse:
|
||||
try:
|
||||
deal_services = await self.session.scalars(
|
||||
select(models.secondary.DealService)
|
||||
.where(models.secondary.DealService.deal_id == request.deal_id,
|
||||
models.secondary.DealService.service_id.in_(request.service_ids))
|
||||
)
|
||||
for deal_service in deal_services:
|
||||
await self.session.delete(deal_service)
|
||||
await self.session.commit()
|
||||
return DealDeleteServicesResponse(ok=True, message='Услуги успешно удалены')
|
||||
except Exception as e:
|
||||
await self.session.rollback()
|
||||
return DealDeleteServicesResponse(ok=False, message=str(e))
|
||||
|
||||
Reference in New Issue
Block a user