8.3 KiB
ADDED Requirements
Requirement: Вики проекта
Приложение SHALL иметь страницу «Вики» (/app/wiki?project=<метка>, пункт боковой панели; текущий проект — как у доски
и задач, «Проект в приложении»). Страница SHALL показывать:
- дерево страниц проекта (
GET /wiki/tree) слева, свёрнутое до первого уровня; узел раскрывается по клику; - выбранную страницу справа (
GET /wiki/pages/{code}): заголовок, дата синхронизации, ссылка «открыть в Eva», Markdown с таблицами, без сырого HTML; ссылкиpage:<код>открывают страницу вики (код в адресе&page=<код>), ссылкиattachment:<id>скачивают вложение (запрос, опрос состояния, сохранение файла браузером), состояниеfailed— текст ошибки рядом со ссылкой; - поиск над деревом (
GET /wiki/search): список результатов с фрагментами вместо дерева, пока строка поиска не пуста; - кнопку «Обновить вики» (
POST /wiki/sync) и плашку хода синхронизации в боковой панели; ответ 409 — плашка текущего пакета; - проекта без корня — форму «Корень вики (DOC-… или ссылка)» с кнопкой «Привязать» (
PATCH /projects/{label}); 422 — текст ошибки у поля; - корень есть, синхронизаций нет — «вики ещё не синхронизирована» и кнопку «Обновить вики»;
- последняя синхронизация с ошибкой — плашку с текстом ошибки над страницей.
Scenario: Открыть страницу по ссылке
- WHEN на странице DOC-3 нажата ссылка
page:DOC-2 - THEN адрес
/app/wiki?project=AWPCA&page=DOC-2, справа DOC-2, в дереве DOC-2 выделен
Scenario: Проект без корня
- WHEN открыта
/app/wiki?project=sfm_kedr, корня нет; введеноDOC-001234, нажато «Привязать» - THEN
PATCH /projects/sfm_kedr {wiki_root: "DOC-001234"}; боковая панель показывает ход пакета синхронизации
Scenario: Поиск
- WHEN в строке поиска «согласов»
- THEN вместо дерева — результаты
GET /wiki/search?project=AWPCA&q=согласов; очистка строки возвращает дерево
MODIFIED Requirements
Requirement: Проект в приложении
Доска, список задач и вики SHALL показывать один проект — текущий. Текущий проект SHALL задаваться параметром
project в адресе /app/board, /app/issues и /app/wiki; без параметра — последний выбранный в этом браузере
(localStorage), если он есть в GET /projects, иначе первый из GET /projects; выбранный проект записывается в адрес
без новой записи истории. Проекта из адреса нет в GET /projects — страница SHALL показывать «проект <метка> не найден»
и выпадающий список проектов вместо данных. Проектов нет — доска, список и вики SHALL показывать приглашение создать
проект («+ Новый проект…»). Переходы между «Доска связей», «Задачи» и «Вики» SHALL сохранять текущий проект. Карточка
задачи (/app/issues/{key}) от проекта не зависит.
Доска SHALL загружать GET /board?project=<текущий>; «Обновить из Jira» — POST /refresh {full: true}, обновляет все
проекты. Раскладка, дорожки и фильтры доски в localStorage SHALL храниться отдельно для каждого проекта;
у проекта AWPCA — на прежних ключах (раскладка, сделанная до проектов, сохраняется). Фильтр спринтов SHALL
показываться, только если хотя бы у одной своей задачи снимка (neighbor = false) есть спринт; иначе — «колонки
«Спринт» нет — показаны все задачи».
Форма «Новый проект» (пункт «+ Новый проект…» выпадающего списка) SHALL открываться окном поверх страницы: метка,
название и поля модулей — номер доски Jira (необязательно; подсказка «scrum или kanban определится сам») и корень вики
(необязательно; подсказка «DOC-… или ссылка на страницу Eva»). Пустое необязательное поле в запрос не попадает.
«Создать» — POST /projects с автором viewer; ошибка хаба 409/422 — текст detail рядом с кнопкой, окно остаётся
открытым; успех — окно закрывается, текущим становится новый проект, боковая панель показывает ход пакета обновления из
ответа (batch_id).
Scenario: Первый вход после выкатки
- WHEN открыт
/app/boardбезproject, вlocalStorageвыбора нет, проектыAWPCAиSTOCKS_DRRK - THEN адрес —
/app/board?project=AWPCA, доска —GET /board?project=AWPCAс прежней раскладкой карточек
Scenario: Переключение проекта
- WHEN на доске
AWPCAв выпадающем списке выбранSTOCKS_DRRK, затем открыт раздел «Задачи» - THEN доска —
GET /board?project=STOCKS_DRRKсо своей раскладкой; адрес «Задач» —/app/issues?project=STOCKS_DRRK
Scenario: Неизвестный проект в адресе
- WHEN открыт
/app/issues?project=NOPE - THEN «проект NOPE не найден» и список проектов; запроса
GET /issuesнет
Scenario: Создание проекта из формы
- WHEN в форме введены
STOCKS_DRRK, «Запасы ДРРК», доска и корень вики пусто; нажато «Создать» - THEN
POST /projects {label: "STOCKS_DRRK", name: "Запасы ДРРК", author: "viewer"}; текущий проект —STOCKS_DRRK; боковая панель показывает «пакет #N выполняется»
Scenario: Проект с корнем вики из формы
- WHEN в форме введены
STOCKS_DRRK, «Запасы ДРРК», кореньDOC-001234; нажато «Создать» - THEN
POST /projects {label: "STOCKS_DRRK", name: "Запасы ДРРК", wiki_root: "DOC-001234", author: "viewer"}
Scenario: Метка занята
- WHEN в форме введена метка
awpca, хаб ответил 409 - THEN окно открыто, рядом с «Создать» — текст ошибки хаба
Scenario: Канбан-проект
- WHEN текущий проект —
STOCKS_DRRK, ни у одной своей задачи снимка нет спринта (у соседа изAWPCAспринт есть) - THEN вместо фильтра спринтов — «колонки «Спринт» нет — показаны все задачи»