Files
forms/app/api/v1/submissions.py
2026-04-09 19:28:41 +03:00

79 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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"}