first
This commit is contained in:
79
app/api/v1/submissions.py
Normal file
79
app/api/v1/submissions.py
Normal 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"}
|
||||
Reference in New Issue
Block a user