from dependency_injector.wiring import Provide, inject from fastapi import APIRouter, Depends, UploadFile, Request from ielts_be.dtos.level import LevelExercisesDTO from ielts_be.middlewares import Authorized, IsAuthenticatedViaBearerToken from ielts_be.controllers import ILevelController controller = "level_controller" level_router = APIRouter() @level_router.post( '/', dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] ) @inject async def generate_exercises( dto: LevelExercisesDTO, level_controller: ILevelController = Depends(Provide[controller]) ): return await level_controller.generate_exercises(dto) @level_router.get( '/', dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] ) @inject async def get_level_exam( level_controller: ILevelController = Depends(Provide[controller]) ): return await level_controller.get_level_exam() @level_router.get( '/utas', dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] ) @inject async def get_level_utas( level_controller: ILevelController = Depends(Provide[controller]) ): return await level_controller.get_level_utas() @level_router.post( '/import/', dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] ) @inject async def import_level( exercises: UploadFile, solutions: UploadFile = None, level_controller: ILevelController = Depends(Provide[controller]) ): return await level_controller.upload_level(exercises, solutions) @level_router.post( '/custom/', dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] ) @inject async def custom_level( request: Request, level_controller: ILevelController = Depends(Provide[controller]) ): data = await request.json() return await level_controller.get_custom_level(data)