Проект 1 — Kaspi Lab

Загрузка и обработка файлов

Активный Endpoint: /api/v1/upload/

Информация для проверки:
• Live версия: kaspi.icod.kz
• Панель хранения: S3 Browser
При загрузке тяжёлых файлов (100MB+) браузер может долго удерживать соединение перед получением ответа. Для стресс-тестов используйте прямые вызовы API.
Важно: при отправке формы на сервер одновременно будут отправлены 2 параллельных запроса в POST /api/v1/upload/ — по одному на каждый файл. Сервер должен корректно обрабатывать конкурентную загрузку.
# Имя файла Прогресс Статус / Ответ сервера
Очередь загрузки пуста

🗄️ Состояние базы данных Ожидание данных...

UUID (ID) Название файла Размер Дата загрузки Хеш-сумма Действие

☁️ Хранилище S3 (Object Storage) Синхронизация...

UUID OBJECT NAME SIZE UPLOAD DATE HASH ACTION

API Endpoints and Responses

Detailed contract for available backend endpoints.

METHOD + PATH STATUS CODES RESPONSE EXAMPLE
GET / 200 HTML page index
GET /api/v1/ 200
{"success": true, "msg": "API v1 работает."}
POST /api/v1/upload/
multipart/form-data, field: file
202, 400, 409, 500
202: {"success": true,  "msg": "Файл принят в обработку."}
409: {"success": false, "msg": "Файл с таким содержимым уже обрабатывается."}
409: {"success": false, "msg": "Файл с таким hash уже существует в базе данных."}
400: {"success": false, "msg": "Файл не передан в запросе."}
500: {"success": false, "msg": "Внутренняя ошибка контроллера: ..."}
GET /api/v1/db/files 200, 500
200: {"success": true, "msg": "...", "files": [{"id": 1, "uuid": "...", "uploadDate": "...", "name": "...", "size": 123, "hash": "...", "url": "..."}]}
500: {"success": false, "msg": "Не удалось получить список файлов из базы данных: ..."}
GET /api/v1/storage/files 200, 500
200: {"success": true, "msg": "...", "files": [{"id": null, "uuid": null, "uploadDate": "...", "name": "...", "size": 123, "hash": null, "url": "..."}]}
500: {"success": false, "msg": "Не удалось получить список файлов из S3: ..."}