=Про API логику
Пользователь загружает (один) файл.
Метаданные файла записываются в базу. Файл параллельно качается чанками и сохраняется на сервер.
Расчет на то, что:
- пользователь от сервера далеко;
- один файл может иметь большой вес.
- Загруженный на сервер файл отправляет реферный ключ от файла на сторону AI/парсера/анализатора.
- По рефер ключу начинает качатся файл для анализа.
1) Массово, один файл может качать 10 пользователей.
2) Рефер ключ обновляется каждые 90 секунд.
3) Останавливает обновление через 10 минут или как только парсер начал качать файл. !! Логики дл перезапуска ключа - нет.
По SSE на фронт передаёт url для загрузки файла.
== О статусах
От момента отправления файла на сервер, до сохранения на сервере - результатов анализа (того самого файла), файл получает статусы:
====status file
- "--------"
- "processing"
- "ready"
- "error"
- db_ready
=====Статусы нарушений для комментариев
- "----"
- "None"
- "mild"
- "moderate"
- "severe"
== URL
Локальный:
- "admin/"; Старая версия
- "cms/"; Новая версия
- "swagger/" API;
- "redoc/" API - возможно скачать для Postman;
- "swagger<format>/".
==Базобвые API-ключи
- "POST {{url}}/files/"- сохранить файл. Передать чем раньше тем лучше, в связи с (возможным) большим весом файла. В ответ получаете ID-файла.;
- "POST {{url}}/cinema/" - Пользователь отправляет данные из формы (web-страницы)для анализа/парсинг. Передать ID-файла;
- "POST {{url}}/download/:refer/" - Сохранить результат анализа файл. (ещё в работе);
- "GET {{url}}/download/:refer/" - скачать файл;
- "GET {{url}}/csrftoken/" - получить CSRF-token;
- "GET {{url}}/download/:index/" - Стриминг событий в реальном времени о статусе обработки файла (SSE);
"- POST {{url}}/comments/" - Сохранить комментарии от пользователя и AI. Каждая сохраняется отдельной строкой;
- "POST {{url}}/recommend/" - В единой строке объеденяем пользователя и AI. 'refer' у всех общий;
- "POST {{url}}/recommend/" - В единой строке объеденяем пользователя и AI. 'refer' у всех общий;
== Законы РФ
Запуская проект, базовый список из "excel"файла вноситься в DB автомматически. Используется команда "load_violations" (самописная).
Из панели администратора список редактируется.
Файл для базовой загрузки: "media/classification_events.xlsx".
Модель: "wink.models_wink.violations.BasisViolation".
Цель: Иеть возможность статичных наименований нарушений, для классификации этих нарушений в сценарии.\ Отдельные модели имеют дополнительные поле для сохранения количества нарушений.
== Celery tasks
- wink/tasks/task_start_rotation::start_rotation
=== Контролер за:
- количеством обращений к файлу от разных польхователей.
- времени работы с реферальной/refer ссылкой.
=== Идея такова
- refer обновляется каждые 90 секунд;
- максимальное время работы ключа 10 минут;
-- один файл могут парсить максимум/лимит 10 пользователей. Это к вопросу , что есть разные роли и все они могут интересоваться сюжетом;
- изначально создаётся (и запускается цикл обновлений) при первичном сохранении файла на диске;
- цикл обновлений останавливается при попытке скачивания файла по 'refer' ключу.
Note: Повторно запустить логику для 'refer' (создать ключ ) - не создано.
Работа в команде сделана