feat: Обновлена форма проверки полиса + автозамена кириллицы
Изменения в форме (Шаг 1): - Полис в одну строку: E1000-302538524 (было: отдельно серия и номер) - Email теперь обязателен (было: опционально) - Убран ИНН (было: опционально) - Автозамена кириллицы на латиницу (Е→E, О→O и т.д.) - Валидация формата: буква + 4 цифры + тире + 9 цифр Изменения в Backend API: - PolicyCheckRequest: voucher + email (убран inn) - policy_service: упрощен запрос к MySQL - Добавлено подключение MySQL в lifespan Изменения в ClaimForm: - FormData обновлен: voucher вместо policyNumber/policySeries - Убрано поле inn из всей логики Статус: Frontend работает, MySQL требует настройки доступа
This commit is contained in:
@@ -10,8 +10,8 @@ router = APIRouter(prefix="/api/v1/policy", tags=["Policy"])
|
||||
|
||||
class PolicyCheckRequest(BaseModel):
|
||||
"""Запрос на проверку полиса"""
|
||||
voucher: str
|
||||
inn: str | None = None
|
||||
voucher: str # Полный номер полиса вида E1000-302538524
|
||||
email: str # Email обязателен
|
||||
|
||||
|
||||
@router.post("/check")
|
||||
@@ -19,14 +19,14 @@ async def check_policy(request: PolicyCheckRequest):
|
||||
"""
|
||||
Проверить полис в БД
|
||||
|
||||
- **voucher**: Номер полиса
|
||||
- **inn**: ИНН (опционально)
|
||||
- **voucher**: Номер полиса вида E1000-302538524
|
||||
- **email**: Email заявителя (обязательно)
|
||||
|
||||
Returns:
|
||||
- found: true/false
|
||||
- policy_data: данные полиса если найден
|
||||
"""
|
||||
policy = await policy_service.check_policy(request.voucher, request.inn)
|
||||
policy = await policy_service.check_policy(request.voucher)
|
||||
|
||||
if policy:
|
||||
return {
|
||||
|
||||
@@ -47,6 +47,12 @@ async def lifespan(app: FastAPI):
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ RabbitMQ not available: {e}")
|
||||
|
||||
try:
|
||||
# Подключаем MySQL (для проверки полисов)
|
||||
await policy_service.connect()
|
||||
except Exception as e:
|
||||
logger.warning(f"⚠️ MySQL Policy DB not available: {e}")
|
||||
|
||||
logger.info("✅ ERV Platform started successfully!")
|
||||
|
||||
yield
|
||||
@@ -57,6 +63,7 @@ async def lifespan(app: FastAPI):
|
||||
await db.disconnect()
|
||||
await redis_service.disconnect()
|
||||
await rabbitmq_service.disconnect()
|
||||
await policy_service.close()
|
||||
|
||||
logger.info("👋 ERV Platform stopped")
|
||||
|
||||
|
||||
@@ -34,13 +34,12 @@ class PolicyService:
|
||||
logger.error(f"❌ MySQL Policy DB connection error: {e}")
|
||||
raise
|
||||
|
||||
async def check_policy(self, voucher: str, inn: Optional[str] = None) -> Optional[Dict[str, Any]]:
|
||||
async def check_policy(self, voucher: str) -> Optional[Dict[str, Any]]:
|
||||
"""
|
||||
Проверить полис в БД
|
||||
|
||||
Args:
|
||||
voucher: Номер полиса
|
||||
inn: ИНН (опционально)
|
||||
voucher: Номер полиса вида E1000-302538524
|
||||
|
||||
Returns:
|
||||
Dict с данными полиса или None если не найден
|
||||
@@ -51,18 +50,10 @@ class PolicyService:
|
||||
try:
|
||||
async with self.pool.acquire() as conn:
|
||||
async with conn.cursor(aiomysql.DictCursor) as cursor:
|
||||
# Базовый запрос
|
||||
query = "SELECT * FROM erv_vouchers WHERE voucher = %s"
|
||||
params = [voucher]
|
||||
# Запрос поиска по номеру полиса
|
||||
query = "SELECT * FROM erv_vouchers WHERE voucher = %s LIMIT 1"
|
||||
|
||||
# Если указан ИНН, добавляем проверку
|
||||
if inn:
|
||||
query += " AND inn = %s"
|
||||
params.append(inn)
|
||||
|
||||
query += " LIMIT 1"
|
||||
|
||||
await cursor.execute(query, params)
|
||||
await cursor.execute(query, [voucher])
|
||||
result = await cursor.fetchone()
|
||||
|
||||
if result:
|
||||
|
||||
Reference in New Issue
Block a user