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

71 lines
2.3 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/schemas/submission.py
from pydantic import BaseModel, Field, validator
from typing import Optional, Dict, Any, List
from datetime import datetime
from app.schemas.common import BaseSchema
class SubmissionMetadata(BaseModel):
"""Метаданные submission"""
ip_address: Optional[str] = None
user_agent: Optional[str] = None
referrer: Optional[str] = None
browser: Optional[str] = None
os: Optional[str] = None
device: Optional[str] = None
location: Optional[Dict[str, Any]] = None
class SubmissionCreate(BaseSchema):
"""Создание submission (отправка формы)"""
form_id: int
data: Dict[str, Any] = Field(..., description="Данные формы")
metadata: Optional[SubmissionMetadata] = None
@validator('data')
def validate_data_not_empty(cls, v):
if not v:
raise ValueError('Data cannot be empty')
return v
class SubmissionUpdate(BaseSchema):
"""Обновление submission"""
data: Optional[Dict[str, Any]] = None
status: Optional[str] = Field(None, pattern='^(draft|completed|rejected)$')
completion_time_seconds: Optional[float] = Field(None, ge=0)
class SubmissionResponse(BaseSchema):
"""Ответ с данными submission - соответствует модели БД"""
id: int
submission_uuid: str
form_id: int
submission_data: Dict[str, Any] # ← изменено с data на submission_data
submission_metadata: Dict[str, Any] = Field(default_factory=dict) # ← изменено с metadata
status: str
submitted_at: datetime
created_at: datetime
updated_at: datetime
submitted_by: Optional[int]
completion_time_seconds: Optional[float]
referrer: Optional[str]
class Config:
from_attributes = True
class SubmissionWithFormResponse(SubmissionResponse):
"""Submission с данными формы"""
form_name: Optional[str] = None
form_version: Optional[int] = None
class SubmissionFilterParams(BaseSchema):
"""Параметры фильтрации submissions"""
status: Optional[str] = None
date_from: Optional[datetime] = None
date_to: Optional[datetime] = None
search: Optional[str] = None
search_fields: Optional[List[str]] = None
field_filters: Dict[str, Any] = Field(default_factory=dict)