# app/api/v1/submissions.py from fastapi import APIRouter, Depends, HTTPException, status, Query from sqlalchemy.orm import Session from typing import Optional, Dict, Any from app.api import deps from app.schemas.submission import SubmissionCreate, SubmissionResponse, SubmissionFilterParams from app.schemas.common import PaginatedResponse from app.services.submission_service import SubmissionService router = APIRouter(prefix="/submissions", tags=["submissions"]) @router.post("/", status_code=status.HTTP_201_CREATED) async def submit_form( submission_data: SubmissionCreate, db: Session = Depends(deps.get_db) ): """Отправить данные формы""" service = SubmissionService(db) try: submission = service.create_submission(submission_data) return submission # Теперь возвращает словарь, а не объект SQLAlchemy except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) @router.get("/{submission_id}", response_model=SubmissionResponse) async def get_submission( submission_id: int, db: Session = Depends(deps.get_db) ): """Получить submission по ID""" service = SubmissionService(db) submission = service.get_submission_by_id(submission_id) if not submission: raise HTTPException(status_code=404, detail="Submission not found") return submission @router.get("/forms/{form_id}/submissions/", response_model=PaginatedResponse[SubmissionResponse]) async def get_form_submissions( form_id: int, page: int = Query(1, ge=1), per_page: int = Query(20, ge=1, le=100), status: Optional[str] = None, db: Session = Depends(deps.get_db) ): """Получить все submission формы""" service = SubmissionService(db) result = service.get_submissions_by_form( form_id=form_id, page=page, per_page=per_page, status=status ) return result @router.put("/{submission_id}", response_model=SubmissionResponse) async def update_submission( submission_id: int, data: Dict[str, Any], db: Session = Depends(deps.get_db) ): """Обновить submission""" service = SubmissionService(db) submission = service.update_submission(submission_id, data) if not submission: raise HTTPException(status_code=404, detail="Submission not found") return submission @router.delete("/{submission_id}", response_model=Dict[str, str]) async def delete_submission( submission_id: int, db: Session = Depends(deps.get_db) ): """Удалить submission""" service = SubmissionService(db) success = service.delete_submission(submission_id) if not success: raise HTTPException(status_code=404, detail="Submission not found") return {"message": "Submission deleted successfully"}