feat: 6 улучшений формы - S3 upload, draft, HEIC, email на step3

1.  Placeholder с тире E1000-302538524
   - Теперь в placeholder тоже тире

2.  Email перенесен на Step3
   - Убран с Step1 (проверка полиса)
   - Добавлен на Step3 (вместе с телефоном)
   - Теперь телефон + email + выплата на одном шаге

3.  HEIC формат + мультилоад
   - Добавлена поддержка .heic, .heif (iPhone формат)
   - Убран maxCount - неограниченная загрузка
   - Параметр multiple для множественной загрузки

4.  S3 Upload
   - Создан s3_service.py для работы с Timeweb S3
   - Новый endpoint: POST /api/v1/upload/files
   - Поддержка мультизагрузки файлов
   - Автоматическая генерация уникальных имен
   - Файлы грузятся в S3, не локально

5.  Draft автосохранение
   - Создана таблица claims_draft в PostgreSQL
   - Новый API: POST /api/v1/draft/save
   - GET /api/v1/draft/stats - статистика по шагам
   - GET /api/v1/draft/list - список последних драфтов
   - Для аналитики: где люди бросают заполнение

6.  Миграция БД
   - 002_create_claims_draft.sql применена
   - Индексы для быстрого поиска
   - JSONB поле для гибкости данных

Backend:
- s3_service.py - сервис для S3
- draft.py - API автосохранения
- upload.py - обновлен endpoint для S3
- main.py - добавлены роуты и подключения

Frontend:
- Step1Policy: убран email, добавлен HEIC
- Step3Payment: добавлен email после телефона

Статус:  Backend подключен к S3, таблица создана, всё работает
This commit is contained in:
AI Assistant
2025-10-24 21:24:00 +03:00
parent f2cfa54c9d
commit e34f7a598b
7 changed files with 420 additions and 26 deletions

View File

@@ -0,0 +1,26 @@
-- Создание таблицы для автосохранения драфтов форм
-- Используется для аналитики: где люди бросают заполнение
CREATE TABLE IF NOT EXISTS claims_draft (
id SERIAL PRIMARY KEY,
session_id VARCHAR(255) UNIQUE NOT NULL, -- Уникальный ID сессии браузера
current_step INTEGER NOT NULL, -- Текущий шаг формы (1, 2, 3)
form_data JSONB NOT NULL, -- Данные формы в JSON
user_agent TEXT, -- User-Agent браузера
ip_address VARCHAR(45), -- IP адрес пользователя
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- Индексы для быстрого поиска
CREATE INDEX idx_claims_draft_session ON claims_draft(session_id);
CREATE INDEX idx_claims_draft_step ON claims_draft(current_step);
CREATE INDEX idx_claims_draft_created ON claims_draft(created_at DESC);
CREATE INDEX idx_claims_draft_updated ON claims_draft(updated_at DESC);
-- Комментарии
COMMENT ON TABLE claims_draft IS 'Автосохранение драфтов форм для аналитики';
COMMENT ON COLUMN claims_draft.session_id IS 'Уникальный ID сессии (из localStorage)';
COMMENT ON COLUMN claims_draft.current_step IS 'Номер шага где пользователь остановился';
COMMENT ON COLUMN claims_draft.form_data IS 'Все данные формы в JSON формате';