Files
math-problems-structure/math_problems_structure/server/routes/grade_1.py

109 lines
3.0 KiB
Python

from fastapi import APIRouter, HTTPException
from math_problems_structure.core.problems.grade_1 import (
compose_and_decompose_numbers,
join_corresponding_sums,
join_pictures_with_quantity,
subtract_with_image_reference,
sum_with_image_reference,
where_are_more_items,
)
from math_problems_structure.core.schemas.grade_1 import (
ComposeAndDecomposeNumbersProblem,
ComposeAndDecomposeNumbersRequest,
JoinCorrespondingSumsProblem,
JoinCorrespondingSumsRequest,
JoinPicturesWithQuantityProblem,
JoinPicturesWithQuantityRequest,
SubtractWithImageReferenceProblem,
SubtractWithImageReferenceRequest,
SumWithImageReferenceProblem,
SumWithImageReferenceRequest,
WhereAreMoreItemsProblem,
WhereAreMoreItemsRequest,
)
router = APIRouter(prefix="/grade-1", tags=["Grade 1"])
def _bad_request(error: ValueError) -> HTTPException:
return HTTPException(status_code=400, detail=str(error))
@router.post(
"/join-pictures-with-quantity",
response_model=JoinPicturesWithQuantityProblem,
)
async def generate_join_pictures_with_quantity(
request: JoinPicturesWithQuantityRequest,
) -> dict:
try:
return join_pictures_with_quantity(**request.model_dump())
except ValueError as error:
raise _bad_request(error) from error
@router.post(
"/join-corresponding-sums",
response_model=JoinCorrespondingSumsProblem,
)
async def generate_join_corresponding_sums(
request: JoinCorrespondingSumsRequest,
) -> dict:
try:
return join_corresponding_sums(**request.model_dump())
except ValueError as error:
raise _bad_request(error) from error
@router.post(
"/sum-with-image-reference",
response_model=SumWithImageReferenceProblem,
)
async def generate_sum_with_image_reference(
request: SumWithImageReferenceRequest,
) -> dict:
try:
return sum_with_image_reference(**request.model_dump())
except ValueError as error:
raise _bad_request(error) from error
@router.post(
"/subtract-with-image-reference",
response_model=SubtractWithImageReferenceProblem,
)
async def generate_subtract_with_image_reference(
request: SubtractWithImageReferenceRequest,
) -> dict:
try:
return subtract_with_image_reference(**request.model_dump())
except ValueError as error:
raise _bad_request(error) from error
@router.post(
"/compose-and-decompose-numbers",
response_model=ComposeAndDecomposeNumbersProblem,
)
async def generate_compose_and_decompose_numbers(
request: ComposeAndDecomposeNumbersRequest,
) -> dict:
try:
return compose_and_decompose_numbers(**request.model_dump())
except ValueError as error:
raise _bad_request(error) from error
@router.post(
"/where-are-more-items",
response_model=WhereAreMoreItemsProblem,
)
async def generate_where_are_more_items(
request: WhereAreMoreItemsRequest,
) -> dict:
try:
return where_are_more_items(**request.model_dump())
except ValueError as error:
raise _bad_request(error) from error