autoform-backend / app /schemas /validation.py
Arslan1997's picture
made it faster and added color picker
17847d4
Raw
History Blame Contribute Delete
1.93 kB
"""
Validation schemas for form submissions
"""
from pydantic import BaseModel, Field
from typing import Optional, List, Dict, Any
from datetime import datetime
class FieldValidationError(BaseModel):
"""Individual field validation error"""
question_id: int
field: str
message: str
error_type: str # "required", "invalid_format", "out_of_range", "invalid_choice", etc.
class ValidationResponse(BaseModel):
"""Structured validation response"""
is_valid: bool
errors: List[FieldValidationError] = []
warnings: List[FieldValidationError] = []
class PartialSubmissionCreate(BaseModel):
"""Schema for auto-save partial submissions"""
session_id: str = Field(..., min_length=1, max_length=64)
form_version: Optional[int] = None
answers: List[Dict[str, Any]] # Flexible for partial data
metadata: Optional[Dict[str, Any]] = None
# UTM parameters
utm_source: Optional[str] = None
utm_medium: Optional[str] = None
utm_campaign: Optional[str] = None
class CompleteSubmissionCreate(BaseModel):
"""Schema for final submission (inherits from existing SubmissionCreate)"""
session_id: str = Field(..., min_length=1, max_length=64)
form_version: Optional[int] = None
answers: List[Dict[str, Any]]
metadata: Optional[Dict[str, Any]] = None
honeypot: Optional[str] = None # Should be empty
# UTM parameters
utm_source: Optional[str] = None
utm_medium: Optional[str] = None
utm_campaign: Optional[str] = None
class ValidationContext(BaseModel):
"""Context for validation including anti-tampering token"""
form_id: int
session_id: str
validation_token: str
timestamp: datetime
class AutoSaveResponse(BaseModel):
"""Response from auto-save endpoint"""
success: bool
submission_id: Optional[int] = None
validation: ValidationResponse
message: str = "Auto-saved successfully"