import uuid from dataclasses import dataclass from typing import Annotated import inject from litestar import Controller, Request, Response, post from litestar.datastructures import UploadFile from litestar.enums import RequestEncodingType from litestar.params import Body from server.modules.recognizer import RecognizerService @dataclass class BeerdsData: f: UploadFile device_id: str class BreedsController(Controller): path = "/beerds" @post("/dogs") async def beerds_dogs( self, request: Request, data: Annotated[BeerdsData, Body(media_type=RequestEncodingType.MULTI_PART)], ) -> Response: user_id = request.cookies.get("user_id") # Cookie, которые нужно добавить в ответ (если пользователь новый) new_cookies: dict[str, str] | None = None if not user_id: user_id = str(uuid.uuid4()) new_cookies = {"user_id": user_id} recognizer_service: RecognizerService = inject.instance(RecognizerService) body = await data.f.read() result = await recognizer_service.predict_dog_image(body, user_id, data.device_id) return Response( content=result.to_serializable(), media_type="application/json", cookies=new_cookies, ) @post("/cats") async def beerds_cats(self, data: Annotated[UploadFile, Body(media_type=RequestEncodingType.MULTI_PART)]) -> dict: recognizer_service: RecognizerService = inject.instance(RecognizerService) body = await data.read() result = await recognizer_service.predict_cat_image(body) return result.to_serializable()