This commit is contained in:
2026-04-09 19:28:41 +03:00
commit 9fa723bb4c
43 changed files with 2804 additions and 0 deletions

79
app/api/v1/submissions.py Normal file
View File

@@ -0,0 +1,79 @@
# 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"}