🚀 MVP: FastAPI + React форма с SMS верификацией
✅ Инфраструктура: PostgreSQL, Redis, RabbitMQ, S3 ✅ Backend: SMS сервис + API endpoints ✅ Frontend: React форма (3 шага) + SMS верификация
This commit is contained in:
64
backend/app/api/models.py
Normal file
64
backend/app/api/models.py
Normal file
@@ -0,0 +1,64 @@
|
||||
"""
|
||||
Pydantic модели для API
|
||||
"""
|
||||
from pydantic import BaseModel, Field, field_validator
|
||||
from typing import Optional, List
|
||||
from datetime import date
|
||||
|
||||
|
||||
class SMSSendRequest(BaseModel):
|
||||
"""Запрос на отправку SMS кода"""
|
||||
phone: str = Field(..., description="Номер телефона в формате +79001234567")
|
||||
|
||||
@field_validator('phone')
|
||||
@classmethod
|
||||
def validate_phone(cls, v: str) -> str:
|
||||
# Убираем все кроме цифр и +
|
||||
clean = ''.join(c for c in v if c.isdigit() or c == '+')
|
||||
if not clean.startswith('+'):
|
||||
clean = '+' + clean
|
||||
if len(clean) != 12: # +7 + 10 цифр
|
||||
raise ValueError('Неверный формат телефона')
|
||||
return clean
|
||||
|
||||
|
||||
class SMSVerifyRequest(BaseModel):
|
||||
"""Запрос на проверку SMS кода"""
|
||||
phone: str = Field(..., description="Номер телефона")
|
||||
code: str = Field(..., min_length=6, max_length=6, description="6-значный код")
|
||||
|
||||
|
||||
class ClaimCreateRequest(BaseModel):
|
||||
"""Запрос на создание заявки"""
|
||||
# Шаг 1: Основная информация
|
||||
phone: str
|
||||
email: Optional[str] = None
|
||||
inn: Optional[str] = None
|
||||
policy_number: str
|
||||
policy_series: Optional[str] = None
|
||||
|
||||
# Шаг 2: Данные о происшествии
|
||||
incident_date: Optional[str] = None
|
||||
incident_description: Optional[str] = None
|
||||
transport_type: Optional[str] = None # "air", "train", "bus", etc.
|
||||
|
||||
# Шаг 3: Данные для выплаты
|
||||
payment_method: str = "sbp" # "sbp", "card", "bank_transfer"
|
||||
bank_name: Optional[str] = None
|
||||
card_number: Optional[str] = None
|
||||
account_number: Optional[str] = None
|
||||
|
||||
# Файлы (UUID после загрузки)
|
||||
uploaded_files: Optional[List[str]] = []
|
||||
|
||||
# Метаданные
|
||||
source: str = "web_form"
|
||||
|
||||
|
||||
class ClaimResponse(BaseModel):
|
||||
"""Ответ после создания заявки"""
|
||||
success: bool
|
||||
claim_id: Optional[str] = None
|
||||
claim_number: Optional[str] = None
|
||||
message: str
|
||||
|
||||
Reference in New Issue
Block a user