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