from aiohttp import web from typing import Callable from server.dna.category.errors import FORBIDDEN_ERROR from server.dna.category.models import Category from server.db.utils import BaseQueryExecutor class CategoryValidator: @staticmethod def category_user_restriction(handler: Callable) -> Callable: async def wrapper(*args, **kwargs) -> web.Response: request = args[0] user_id = request.headers.get("X-User-Id") category_id = kwargs.get("id") if category_id: filters = {"user_id": user_id, "id": category_id, "is_deleted": None} user_category_count = await BaseQueryExecutor.get_count(model=Category, filters=filters) if user_category_count == 0: return web.json_response(data=FORBIDDEN_ERROR, status=403) return await handler(request, **dict(kwargs)) return wrapper