feat: crappy reordering
This commit is contained in:
@@ -112,6 +112,19 @@ async def create_category(
|
||||
return await ServiceService(session).create_category(request)
|
||||
|
||||
|
||||
@service_router.post(
|
||||
'/categories/update',
|
||||
response_model=ServiceUpdateCategoryResponse,
|
||||
operation_id="update_service_category",
|
||||
dependencies=[Depends(authorized_user)]
|
||||
)
|
||||
async def update_category(
|
||||
session: Annotated[AsyncSession, Depends(get_session)],
|
||||
request: ServiceUpdateCategoryRequest
|
||||
):
|
||||
return await ServiceService(session).update_category(request)
|
||||
|
||||
|
||||
@service_router.post(
|
||||
'/categories/reorder',
|
||||
response_model=ServiceCategoryReorderResponse,
|
||||
|
||||
@@ -122,6 +122,10 @@ class ServiceCategoryReorderRequest(BaseSchema):
|
||||
service_type: int
|
||||
|
||||
|
||||
class ServiceUpdateCategoryRequest(BaseSchema):
|
||||
category: ServiceCategorySchema
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
# region Responses
|
||||
@@ -183,4 +187,8 @@ class ServiceReorderResponse(OkMessageSchema):
|
||||
|
||||
class ServiceCategoryReorderResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class ServiceUpdateCategoryResponse(OkMessageSchema):
|
||||
pass
|
||||
# endregion
|
||||
|
||||
@@ -160,6 +160,26 @@ class ServiceService(BaseService):
|
||||
raw_category = request.category
|
||||
category_dict = raw_category.model_dump()
|
||||
del category_dict['id']
|
||||
last_deal_service_rank = await self.session.scalar(
|
||||
select(ServiceCategory.deal_service_rank)
|
||||
.order_by(ServiceCategory.deal_service_rank.desc())
|
||||
.limit(1)
|
||||
)
|
||||
last_product_service_rank = await self.session.scalar(
|
||||
select(ServiceCategory.product_service_rank)
|
||||
.order_by(ServiceCategory.product_service_rank.desc())
|
||||
.limit(1)
|
||||
)
|
||||
last_product_service_rank = lexorank.parse(
|
||||
last_product_service_rank) if last_product_service_rank else middle(
|
||||
Bucket.BUCEKT_0)
|
||||
last_deal_service_rank = lexorank.parse(last_deal_service_rank) if last_deal_service_rank else middle(
|
||||
Bucket.BUCEKT_0)
|
||||
last_deal_service_rank = last_deal_service_rank.next()
|
||||
last_product_service_rank = last_product_service_rank.next()
|
||||
category_dict['deal_service_rank'] = str(last_deal_service_rank)
|
||||
category_dict['product_service_rank'] = str(last_product_service_rank)
|
||||
|
||||
category = ServiceCategory(**category_dict)
|
||||
self.session.add(category)
|
||||
await self.session.commit()
|
||||
@@ -379,3 +399,21 @@ class ServiceService(BaseService):
|
||||
return ServiceCategoryReorderResponse(ok=True, message="Категории успешно пересортированы")
|
||||
except Exception as e:
|
||||
return ServiceCategoryReorderResponse(ok=False, message=f"Неудалось пересортировать категорию, ошибка: {e}")
|
||||
|
||||
async def update_category(self, request: ServiceUpdateCategoryRequest) -> ServiceUpdateResponse:
|
||||
try:
|
||||
raw_category = request.category
|
||||
category = await (self.session.get(ServiceCategory, raw_category.id))
|
||||
if not category:
|
||||
return ServiceUpdateResponse(ok=False, message="Категория не найдена")
|
||||
category_dict = raw_category.dict()
|
||||
del category_dict['id']
|
||||
await self.session.execute(
|
||||
update(ServiceCategory)
|
||||
.where(ServiceCategory.id == raw_category.id)
|
||||
.values(**category_dict)
|
||||
)
|
||||
await self.session.commit()
|
||||
return ServiceUpdateResponse(ok=True, message="Категория успешно обновлена")
|
||||
except Exception as e:
|
||||
return ServiceUpdateResponse(ok=False, message=f"Неудалось обновить категорию, ошибка: {e}")
|
||||
|
||||
Reference in New Issue
Block a user