feat: crappy reordering

This commit is contained in:
2024-10-08 00:03:55 +03:00
parent aae7e96001
commit 9a2ec02ac4
3 changed files with 59 additions and 0 deletions

View File

@@ -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,

View File

@@ -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

View File

@@ -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}")