fix: service update fixed
This commit is contained in:
@ -1,8 +1,11 @@
|
|||||||
|
from sqlalchemy import delete
|
||||||
|
|
||||||
from modules.fulfillment_base.models import Service
|
from modules.fulfillment_base.models import Service
|
||||||
from modules.fulfillment_base.models.service import ServicePriceRange
|
from modules.fulfillment_base.models.service import ServicePriceRange
|
||||||
from modules.fulfillment_base.schemas.service import (
|
from modules.fulfillment_base.schemas.service import (
|
||||||
CreateServiceSchema,
|
CreateServiceSchema,
|
||||||
UpdateServiceSchema,
|
UpdateServiceSchema,
|
||||||
|
ServicePriceRangeSchema,
|
||||||
)
|
)
|
||||||
from repositories.mixins import *
|
from repositories.mixins import *
|
||||||
|
|
||||||
@ -17,20 +20,29 @@ class ServiceRepository(
|
|||||||
entity_class = Service
|
entity_class = Service
|
||||||
entity_not_found_msg = "Услуга не найдена"
|
entity_not_found_msg = "Услуга не найдена"
|
||||||
|
|
||||||
async def create(self, data: CreateServiceSchema) -> int:
|
def _process_get_all_stmt(self, stmt: Select) -> Select:
|
||||||
price_ranges = []
|
return stmt.order_by(Service.lexorank)
|
||||||
for range in data.price_ranges:
|
|
||||||
price_ranges.append(
|
@staticmethod
|
||||||
|
def _price_ranges_schemas_to_models(
|
||||||
|
price_ranges: list[ServicePriceRangeSchema],
|
||||||
|
) -> list[ServicePriceRange]:
|
||||||
|
models = []
|
||||||
|
for range in price_ranges:
|
||||||
|
models.append(
|
||||||
ServicePriceRange(
|
ServicePriceRange(
|
||||||
from_quantity=range.from_quantity,
|
from_quantity=range.from_quantity,
|
||||||
to_quantity=range.to_quantity,
|
to_quantity=range.to_quantity,
|
||||||
price=range.price,
|
price=range.price,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
return models
|
||||||
|
|
||||||
|
async def create(self, data: CreateServiceSchema) -> int:
|
||||||
|
price_ranges = self._price_ranges_schemas_to_models(data.price_ranges)
|
||||||
|
|
||||||
data_dict = data.model_dump()
|
data_dict = data.model_dump()
|
||||||
data_dict["price_ranges"] = price_ranges
|
data_dict["price_ranges"] = price_ranges
|
||||||
data_dict["category_id"] = data.category.id
|
|
||||||
del data_dict["category"]
|
del data_dict["category"]
|
||||||
|
|
||||||
service = Service(**data_dict)
|
service = Service(**data_dict)
|
||||||
@ -39,7 +51,21 @@ class ServiceRepository(
|
|||||||
await self.session.refresh(service)
|
await self.session.refresh(service)
|
||||||
return service.id
|
return service.id
|
||||||
|
|
||||||
|
async def _delete_price_ranges_by_service_id(self, service_id: int) -> None:
|
||||||
|
stmt = delete(ServicePriceRange).where(
|
||||||
|
ServicePriceRange.service_id == service_id
|
||||||
|
)
|
||||||
|
await self.session.execute(stmt)
|
||||||
|
await self.session.commit()
|
||||||
|
|
||||||
async def update(self, service: Service, data: UpdateServiceSchema) -> Service:
|
async def update(self, service: Service, data: UpdateServiceSchema) -> Service:
|
||||||
|
await self._delete_price_ranges_by_service_id(service.id)
|
||||||
|
price_ranges = self._price_ranges_schemas_to_models(data.price_ranges)
|
||||||
|
for price_range in price_ranges:
|
||||||
|
service.price_ranges.append(price_range)
|
||||||
|
del data.price_ranges
|
||||||
|
del data.category
|
||||||
|
|
||||||
return await self._apply_update_data_to_model(service, data, True)
|
return await self._apply_update_data_to_model(service, data, True)
|
||||||
|
|
||||||
async def get_by_ids(self, ids: list[int]) -> list[Service]:
|
async def get_by_ids(self, ids: list[int]) -> list[Service]:
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
from pydantic import field_validator
|
||||||
|
|
||||||
from modules.fulfillment_base.schemas.service_category import ServiceCategorySchema
|
from modules.fulfillment_base.schemas.service_category import ServiceCategorySchema
|
||||||
from schemas.base import BaseSchema, BaseResponse
|
from schemas.base import BaseSchema, BaseResponse
|
||||||
|
|
||||||
@ -17,12 +19,20 @@ class ServicePriceRangeSchema(BaseSchema):
|
|||||||
class CreateServiceSchema(BaseSchema):
|
class CreateServiceSchema(BaseSchema):
|
||||||
name: str
|
name: str
|
||||||
category: ServiceCategorySchema
|
category: ServiceCategorySchema
|
||||||
|
category_id: Optional[int] = None
|
||||||
price: float
|
price: float
|
||||||
service_type: int
|
service_type: int
|
||||||
price_ranges: list[ServicePriceRangeSchema]
|
price_ranges: list[ServicePriceRangeSchema]
|
||||||
cost: Optional[float]
|
cost: Optional[float]
|
||||||
lexorank: str
|
lexorank: str
|
||||||
|
|
||||||
|
@field_validator("category_id", mode="before")
|
||||||
|
@classmethod
|
||||||
|
def set_category_id(cls, v, info):
|
||||||
|
if v is None and "category" in info.data:
|
||||||
|
return info.data["category"].id
|
||||||
|
return v
|
||||||
|
|
||||||
|
|
||||||
class ServiceSchema(CreateServiceSchema):
|
class ServiceSchema(CreateServiceSchema):
|
||||||
id: int
|
id: int
|
||||||
|
|||||||
Reference in New Issue
Block a user