# ТЗ · TaskAPI — бэкенд трекера задач

**Источник заказа:** FL.ru, проект №5096841 «Написать бэкенд для трекера задач на Java»
https://www.fl.ru/projects/5096841/napisat-bekend-dlya-trekera-zadach-na-java-zadanie-v-onlayn-shkole.html

**Бюджет заказа:** 2 000 ₽ (архив)
**Тип трекера:** API + минимальный веб-клиент (учебный кейс)

## 1. Цель
Показать, что «трекер» — это не только интерфейс: за ним стоит контракт API, валидация, права и статусная модель. В этом кейсе клиентская часть минимальная, а акцент — на спецификации и на консоли-песочнице запросов.

## 2. Роли
| Роль | Права |
|---|---|
| `admin` | всё, включая удаление |
| `member` | создание/изменение своих задач, комментарии |
| `viewer` | только чтение |

## 3. Экраны
1. **API Explorer** — список эндпоинтов, форма запроса, ответ с кодом и телом.
2. **Задачи** — таблица с фильтрами (аналог ответа `GET /tasks`).
3. **Схема** — описание модели данных и статусов.
4. **Тесты** — набор проверок контракта (валидация, права, переходы статусов).

## 4. Функции MVP
- In-browser реализация API на JS: `GET/POST/PATCH/DELETE /tasks`, `/tasks/:id/comments`, `/auth/login`.
- Валидация: обязательные поля, длина, допустимые статусы и приоритеты.
- Статусная модель с запретом перехода `todo → done` без `review`.
- Ролевые ограничения: `viewer` получает `403` на мутации.
- Коды ответов: 200/201/400/401/403/404/409/422.
- Лог запросов с временем, методом, кодом и телом.
- Тесты: 8 проверок с зелёным/красным результатом.
- Экспорт OpenAPI-подобной схемы в JSON.

## 5. Критерии готовности
1. `POST /tasks` без `title` возвращает `400` с описанием поля.
2. `PATCH /tasks/1 {status:"done"}` из `todo` возвращает `422`.
3. `DELETE` под `viewer` возвращает `403`.
4. `GET /tasks?status=progress` фильтрует корректно.
5. Все 8 тестов проходят в демо-наборе.
6. Схема выгружается и содержит все поля модели.

## 6. Вопросы клиенту
1. Нужна ли авторизация по JWT или достаточно API-ключа?
2. Какая БД предполагается — PostgreSQL или MySQL?
3. Нужны ли webhooks при смене статуса?
4. Есть ли требования к пагинации и сортировке?
5. Нужен ли аудит изменений (кто и что поменял)?
6. Достаточно ли REST или нужен GraphQL?

## 7. Ограничения MVP
Это учебная реализация контракта в браузере: без реального сервера и БД. Цель — проверить спецификацию и поведение API до написания Java-кода.
