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

91 lines
2.9 KiB
Python
Raw Permalink 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/forms.py
from fastapi import APIRouter, Depends, HTTPException, status, Query
from sqlalchemy.orm import Session
from typing import Optional
from app.api import deps
from app.schemas.form import FormCreate, FormUpdate, FormResponse, FormWithFieldsResponse
from app.schemas.common import MessageResponse, PaginatedResponse
from app.services.form_service import FormService
router = APIRouter(prefix="/forms", tags=["forms"])
@router.post("/", response_model=FormResponse, status_code=status.HTTP_201_CREATED)
async def create_form(
form_data: FormCreate,
db: Session = Depends(deps.get_db),
current_user: Optional[dict] = Depends(deps.get_current_user)
):
"""Создать новую форму"""
service = FormService(db)
try:
form = service.create_form(form_data, user_id=current_user.get("id") if current_user else None)
return form
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
@router.get("/", response_model=PaginatedResponse[FormResponse])
async def list_forms(
page: int = Query(1, ge=1),
per_page: int = Query(20, ge=1, le=100),
active_only: bool = False,
db: Session = Depends(deps.get_db)
):
"""Список форм с пагинацией"""
service = FormService(db)
result = service.get_forms_paginated(
page=page,
per_page=per_page,
active_only=active_only
)
return result
@router.get("/{form_id}")
async def get_form(
form_id: int,
db: Session = Depends(deps.get_db)
):
"""Получить форму по ID с полями"""
service = FormService(db)
form = service.get_form_with_fields(form_id)
if not form:
raise HTTPException(status_code=404, detail="Form not found")
return form
@router.put("/{form_id}", response_model=FormResponse)
async def update_form(
form_id: int,
form_data: FormUpdate,
db: Session = Depends(deps.get_db)
):
"""Обновить форму"""
service = FormService(db)
form = service.update_form(form_id, form_data)
if not form:
raise HTTPException(status_code=404, detail="Form not found")
return form
@router.delete("/{form_id}", response_model=MessageResponse)
async def delete_form(
form_id: int,
db: Session = Depends(deps.get_db)
):
"""Удалить форму"""
service = FormService(db)
success = service.delete_form(form_id)
if not success:
raise HTTPException(status_code=404, detail="Form not found")
return MessageResponse(message="Form deleted successfully")
@router.post("/{form_id}/publish", response_model=FormResponse)
async def publish_form(
form_id: int,
publish: bool = True,
db: Session = Depends(deps.get_db)
):
"""Опубликовать или скрыть форму"""
service = FormService(db)
form = service.publish_form(form_id, publish)
if not form:
raise HTTPException(status_code=404, detail="Form not found")
return form