init + api use

This commit is contained in:
Primakov Alexandr Alexandrovich
2025-11-03 17:59:08 +03:00
commit e777b57991
52 changed files with 20725 additions and 0 deletions

173
stubs/api/README.md Normal file
View File

@@ -0,0 +1,173 @@
# Challenge Admin API Stubs
Стабовый API сервер для разработки и тестирования админской панели Challenge Service.
## 📁 Структура
```
stubs/api/
├── data/ # JSON файлы с тестовыми данными
│ ├── tasks.json # Задания (5 шт.)
│ ├── chains.json # Цепочки (3 шт.)
│ ├── users.json # Пользователи (8 шт.)
│ ├── submissions.json # Попытки (8 шт.)
│ └── stats.json # Системная статистика
├── index.js # API роуты
└── README.md # Эта документация
```
## 🔧 Реализованные endpoints
### Tasks (Задания)
- `GET /api/challenge/tasks` - список всех заданий
- `GET /api/challenge/task/:id` - одно задание
- `POST /api/challenge/task` - создать задание
- `PUT /api/challenge/task/:id` - обновить задание
- `DELETE /api/challenge/task/:id` - удалить задание
### Chains (Цепочки)
- `GET /api/challenge/chains` - список всех цепочек
- `GET /api/challenge/chain/:id` - одна цепочка
- `POST /api/challenge/chain` - создать цепочку
- `PUT /api/challenge/chain/:id` - обновить цепочку
- `DELETE /api/challenge/chain/:id` - удалить цепочку
### Users (Пользователи)
- `GET /api/challenge/users` - список всех пользователей
### Statistics (Статистика)
- `GET /api/challenge/stats` - общая системная статистика
- `GET /api/challenge/user/:userId/stats` - статистика пользователя (генерируется динамически)
### Submissions (Попытки)
- `GET /api/challenge/submissions` - все попытки
- `GET /api/challenge/user/:userId/submissions?taskId=xxx` - попытки пользователя (с опциональной фильтрацией по заданию)
## 📝 Формат ответов
Все ответы возвращаются в формате:
### Успешный ответ
```json
{
"error": null,
"data": <данные>
}
```
### Ошибка
```json
{
"error": {
"message": "Описание ошибки"
},
"data": null
}
```
## 💾 In-memory хранилище
Стабовый сервер использует **in-memory хранилище**:
- JSON файлы загружаются в память при первом запросе
- Все изменения (CREATE/UPDATE/DELETE) сохраняются только в памяти
- При перезапуске сервера все изменения сбрасываются
- Оригинальные JSON файлы не изменяются
## 🎯 Особенности
### 1. Автоматическое обновление статистики
При создании/удалении задания или цепочки автоматически обновляется системная статистика.
### 2. Динамическая генерация статистики пользователей
Endpoint `/api/challenge/user/:userId/stats` генерирует статистику на лету на основе:
- Попыток пользователя (submissions)
- Доступных цепочек
- Статуса заданий
### 3. Populate для цепочек
При создании/обновлении цепочки задания автоматически populated из списка заданий.
### 4. Валидация
Стабовый сервер включает базовую валидацию:
- Проверка обязательных полей
- Проверка существования ресурсов
- Возврат корректных HTTP статусов (404, 400)
## 📊 Тестовые данные
### Задания (5 шт.)
1. **Реализовать сортировку массива** - с hiddenInstructions о сложности O(n log n)
2. **Создать REST API endpoint** - с требованием пагинации
3. **Компонент React формы** - с валидацией
4. **SQL запрос с JOIN** - без hiddenInstructions
5. **Валидация формы** - с проверкой edge cases
### Цепочки (3 шт.)
1. **Основы JavaScript** - 2 задания
2. **React разработка** - 1 задание
3. **Backend разработка** - 2 задания
### Пользователи (8 шт.)
- alex_student, maria_dev, ivan_coder, olga_js
- dmitry_react, anna_frontend, sergey_backend, elena_fullstack
### Попытки (8 шт.)
Различные статусы:
- **accepted** (5) - принятые решения
- **needs_revision** (3) - требующие доработки
- Включают реалистичный feedback от LLM
## 🔄 Примеры запросов
### Создать задание
```bash
POST /api/challenge/task
Content-Type: application/json
{
"title": "Новое задание",
"description": "# Описание\n\nТекст задания...",
"hiddenInstructions": "Проверь алгоритм..."
}
```
### Создать цепочку
```bash
POST /api/challenge/chain
Content-Type: application/json
{
"name": "Моя цепочка",
"tasks": ["507f1f77bcf86cd799439011", "507f1f77bcf86cd799439012"]
}
```
### Получить статистику пользователя
```bash
GET /api/challenge/user/user001/stats
```
Ответ будет содержать динамически вычисленную статистику на основе всех попыток пользователя.
## ⚙️ Настройка задержки
По умолчанию все запросы имеют задержку 300ms для имитации сетевых запросов. Изменить можно в `index.js`:
```javascript
const timer = (time = 300) => (req, res, next) => setTimeout(next, time);
```
## 🚀 Использование
Стабы автоматически подключаются при запуске dev сервера:
```bash
npm start
```
Сервер будет доступен на `http://localhost:8099`
---
**Примечание:** Этот стабовый API предназначен только для разработки. В production окружении используйте реальный Challenge Service API.