mirror of
https://gitverse.ru/kpa39l/email-assistant.git
synced 2026-09-29 09:15:09 +00:00
52 lines
2.3 KiB
Markdown
52 lines
2.3 KiB
Markdown
# Task Tracker Vikunja — Requirement Spec (Delta)
|
||
|
||
> New capability: `task-tracker-vikunja`
|
||
> Change: `local-calendar-tasks`
|
||
|
||
## ADDED Requirements
|
||
|
||
### Requirement: REQ-VIK-001: Локальный трекер задач
|
||
|
||
**MUST** — на bigbox должен работать трекер задач Vikunja, доступный по
|
||
HTTP на 127.0.0.1:3456 (или через Caddy на поддомене), с веб-интерфейсом
|
||
и REST API.
|
||
|
||
#### Scenario: Vikunja отвечает
|
||
|
||
**GIVEN** Vikunja запущен (docker compose)
|
||
**WHEN** выполняется `curl http://127.0.0.1:3456/api/v1/info`
|
||
**THEN** ответ содержит JSON с `version` и статус 200.
|
||
|
||
### Requirement: REQ-VIK-002: REST API для создания задач
|
||
|
||
**MUST** — API Vikunja позволяет создавать задачи программно (для кнопки
|
||
«Создать задачу» из веб-интерфейса почты), используя API-токен.
|
||
|
||
#### Scenario: Создание задачи через API
|
||
|
||
**GIVEN** валидный API-токен Vikunja
|
||
**WHEN** выполняется `POST /api/v1/projects/<id>/tasks` с телом
|
||
`{"title": "Тестовая задача", "description": "из письма"}`
|
||
**THEN** задача создаётся (HTTP 201) и видна в веб-UI.
|
||
|
||
### Requirement: REQ-VIK-003: Авторизация
|
||
|
||
**MUST** — Vikunja должен требовать аутентификацию (логин/пароль или
|
||
API-токен) для всех операций, кроме анонимного info.
|
||
|
||
#### Scenario: Доступ без токена запрещён
|
||
|
||
**GIVEN** неавторизованный запрос
|
||
**WHEN** выполняется `POST /api/v1/projects/<id>/tasks`
|
||
**THEN** возвращается 401/403, задача не создаётся.
|
||
|
||
### Requirement: REQ-VIK-004: Хранение данных
|
||
|
||
**MUST** — данные Vikunja хранятся в PostgreSQL (docker volume), переживают
|
||
перезапуск контейнера.
|
||
|
||
#### Scenario: Перезапуск Vikunja
|
||
|
||
**GIVEN** Vikunja с созданными задачами
|
||
**WHEN** контейнер перезапускается (`docker compose restart`)
|
||
**THEN** задачи и проекты сохраняются (volume не теряется). |