from dependency_injector.wiring import inject, Provide from fastapi import APIRouter, Depends, Path, Request, BackgroundTasks from app.controllers.abc import IGradeController from app.dtos.writing import WritingGradeTaskDTO from app.middlewares import Authorized, IsAuthenticatedViaBearerToken controller = "grade_controller" grade_router = APIRouter() @grade_router.post( '/writing/{task}', dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] ) @inject async def grade_writing_task( data: WritingGradeTaskDTO, background_tasks: BackgroundTasks, task: int = Path(..., ge=1, le=2), grade_controller: IGradeController = Depends(Provide[controller]) ): return await grade_controller.grade_writing_task(task, data, background_tasks) @grade_router.post( '/speaking/{task}', dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] ) @inject async def grade_speaking_task( request: Request, background_tasks: BackgroundTasks, task: int = Path(..., ge=1, le=3), grade_controller: IGradeController = Depends(Provide[controller]) ): form = await request.form() return await grade_controller.grade_speaking_task(task, form, background_tasks) @grade_router.post( '/summary', dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] ) @inject async def grading_summary( request: Request, grade_controller: IGradeController = Depends(Provide[controller]) ): data = await request.json() return await grade_controller.grading_summary(data) @grade_router.post( '/short_answers', dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] ) @inject async def grade_short_answers( request: Request, grade_controller: IGradeController = Depends(Provide[controller]) ): data = await request.json() return await grade_controller.grade_short_answers(data)