60 lines
2.4 KiB
Python
60 lines
2.4 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
||
from sqlalchemy.orm import Session
|
||
from typing import List
|
||
|
||
from app.schemas.calculation import CalculationCreate, CalculationRead
|
||
from app.services import calculation_service as service
|
||
from app.db.session import get_db
|
||
|
||
router = APIRouter(
|
||
prefix="/calculation", # Общий префикс для эндпоинтов этого роутера
|
||
tags=["Calculations"], # Тег для группировки в документации Swagger
|
||
)
|
||
|
||
@router.post("/", response_model=CalculationRead, status_code=status.HTTP_201_CREATED)
|
||
async def run_calculation(
|
||
calc_in: CalculationCreate,
|
||
db: Session = Depends(get_db)
|
||
):
|
||
"""
|
||
Запускает новый расчет раскройки стекла (асинхронно).
|
||
|
||
- Принимает `input_params` и опционально `model_name`.
|
||
- Вызывает внутреннюю асинхронную логику расчета (заглушку).
|
||
- Сохраняет входные параметры и результаты в БД.
|
||
- Возвращает созданную запись о расчете.
|
||
"""
|
||
print("Received request to run calculation")
|
||
calculation = await service.create_calculation(db=db, calc_in=calc_in)
|
||
print("Calculation service finished, returning response")
|
||
return calculation
|
||
|
||
@router.get("/{calculation_id}", response_model=CalculationRead)
|
||
async def read_calculation(
|
||
calculation_id: int,
|
||
db: Session = Depends(get_db)
|
||
):
|
||
"""
|
||
Получает информацию о конкретном расчете по его ID.
|
||
"""
|
||
db_calc = service.get_calculation_by_id(db=db, calc_id=calculation_id)
|
||
if db_calc is None:
|
||
raise HTTPException(
|
||
status_code=status.HTTP_404_NOT_FOUND,
|
||
detail="Calculation not found"
|
||
)
|
||
return db_calc
|
||
|
||
# Определяем эндпоинт для истории до эндпоинта с ID,
|
||
# чтобы FastAPI не принял "history" за ID
|
||
@router.get("/history/", response_model=List[CalculationRead])
|
||
async def read_calculation_history(
|
||
skip: int = 0,
|
||
limit: int = 100,
|
||
db: Session = Depends(get_db)
|
||
):
|
||
"""
|
||
Получает историю всех выполненных расчетов (с пагинацией).
|
||
"""
|
||
calculations = service.get_calculations(db=db, skip=skip, limit=limit)
|
||
return calculations |