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

69 lines
2.1 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/schemas/form.py
from pydantic import BaseModel, Field, validator
from typing import Optional, List, Dict, Any
from datetime import datetime
from app.schemas.common import BaseSchema
from app.schemas.field import FieldResponse
class FormSettings(BaseModel):
"""Настройки формы"""
theme: Optional[str] = "light"
show_submit_button: bool = True
submit_button_text: str = "Submit"
success_message: str = "Form submitted successfully"
redirect_url: Optional[str] = None
send_notifications: bool = False
notification_emails: List[str] = Field(default_factory=list)
limit_one_submission_per_user: bool = False
enable_captcha: bool = False
class FormCreate(BaseSchema):
"""Создание формы"""
name: str = Field(..., min_length=1, max_length=200)
description: Optional[str] = Field(None, max_length=500)
settings: FormSettings = Field(default_factory=FormSettings)
fields: List[Dict[str, Any]] = Field(..., min_items=1)
@validator('name')
def validate_name(cls, v):
if not v.strip():
raise ValueError('Name cannot be empty')
return v.strip()
class FormUpdate(BaseSchema):
"""Обновление формы"""
name: Optional[str] = Field(None, min_length=1, max_length=200)
description: Optional[str] = None
settings: Optional[FormSettings] = None
is_active: Optional[bool] = None
is_published: Optional[bool] = None
class FormResponse(BaseSchema):
"""Ответ с данными формы"""
id: int
name: str
description: Optional[str]
version: int
is_active: bool
is_published: bool
created_at: datetime
updated_at: datetime
created_by: Optional[int]
class Config:
from_attributes = True
class FormWithFieldsResponse(FormResponse):
"""Форма со всеми полями"""
fields: List[FieldResponse] = Field(default_factory=list)
class FormPublishRequest(BaseSchema):
"""Публикация формы"""
publish: bool = True
version_note: Optional[str] = None