52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
import random
|
|
from typing import Optional
|
|
|
|
from dependency_injector.wiring import Provide, inject
|
|
from fastapi import APIRouter, Depends, Path, Query, UploadFile
|
|
|
|
from ielts_be.configs.constants import EducationalContent
|
|
from ielts_be.dtos.reading import ReadingDTO
|
|
from ielts_be.middlewares import Authorized, IsAuthenticatedViaBearerToken
|
|
from ielts_be.controllers import IReadingController
|
|
|
|
controller = "reading_controller"
|
|
reading_router = APIRouter()
|
|
|
|
|
|
@reading_router.post(
|
|
'/import',
|
|
dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))]
|
|
)
|
|
@inject
|
|
async def upload(
|
|
exercises: UploadFile,
|
|
solutions: UploadFile = None,
|
|
reading_controller: IReadingController = Depends(Provide[controller])
|
|
):
|
|
return await reading_controller.import_exam(exercises, solutions)
|
|
|
|
@reading_router.get(
|
|
'/{passage}',
|
|
dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))]
|
|
)
|
|
@inject
|
|
async def generate_passage(
|
|
topic: Optional[str] = Query(None),
|
|
word_count: Optional[int] = Query(None),
|
|
passage: int = Path(..., ge=1, le=3),
|
|
reading_controller: IReadingController = Depends(Provide[controller])
|
|
):
|
|
topic = random.choice(EducationalContent.TOPICS) if not topic else topic
|
|
return await reading_controller.generate_reading_passage(passage, topic, word_count)
|
|
|
|
@reading_router.post(
|
|
'/',
|
|
dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))]
|
|
)
|
|
@inject
|
|
async def generate_reading(
|
|
dto: ReadingDTO,
|
|
reading_controller: IReadingController = Depends(Provide[controller])
|
|
):
|
|
return await reading_controller.generate_reading_exercises(dto)
|