75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
from dependency_injector.wiring import inject, Provide
|
|
from fastapi import APIRouter, Depends, Path, Request
|
|
|
|
from app.controllers.abc import IGradeController
|
|
from app.dtos.writing import WritingGradeTaskDTO
|
|
from app.dtos.speaking import GradeSpeakingAnswersDTO, GradeSpeakingDTO
|
|
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,
|
|
task: int = Path(..., ge=1, le=2),
|
|
grade_controller: IGradeController = Depends(Provide[controller])
|
|
):
|
|
return await grade_controller.grade_writing_task(task, data)
|
|
|
|
|
|
@grade_router.post(
|
|
'/speaking/2',
|
|
dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))]
|
|
)
|
|
@inject
|
|
async def grade_speaking_task_2(
|
|
data: GradeSpeakingDTO,
|
|
grade_controller: IGradeController = Depends(Provide[controller])
|
|
):
|
|
return await grade_controller.grade_speaking_task(2, [data.dict()])
|
|
|
|
|
|
@grade_router.post(
|
|
'/speaking/{task}',
|
|
dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))]
|
|
)
|
|
@inject
|
|
async def grade_speaking_task_1_and_3(
|
|
data: GradeSpeakingAnswersDTO,
|
|
task: int = Path(..., ge=1, le=3),
|
|
grade_controller: IGradeController = Depends(Provide[controller])
|
|
):
|
|
return await grade_controller.grade_speaking_task(task, data.answers)
|
|
|
|
|
|
@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)
|