Files
docs.a2v.space/content/yasha/leadera/leadera-gantt-public-access.md
T
Агальцов Антон dd67d2c2ec Реструктуризация: два глобальных раздела — Яша и Семен
Весь контент перенесён в content/yasha/ (7 подразделов).
Создан content/semen/ с подразделами: changelog, kb, diary.
Навигация — dropdown в навбаре, двухуровневое меню в hugo.toml.
Шаблоны, сайдбар, поиск обновлены под вложенные секции.
2026-04-26 19:44:52 +03:00

126 lines
6.8 KiB
Markdown

---
title: "Leadera — Публичный доступ к диаграмме Ганта"
date: 2026-04-09
lastmod: 2026-04-09
tags: ["leadera", "gantt", "public-access", "sharing"]
weight: 130
---
# Публичный доступ к диаграмме Ганта (Share)
**Дата:** 09.04.2026
**Статус:** Требования
**Проект:** Leadera
---
## Общее описание
Пользователь может создать публичную ссылку на фрагмент диаграммы Ганта, доступную для просмотра без авторизации. Открывший ссылку видит диаграмму в read-only режиме с возможностью масштабирования таймлайна, но без каких-либо элементов управления (создание, редактирование, удаление задач/секций/вех).
---
## Пользовательский сценарий (создатель ссылки)
1. Пользователь открывает диаграмму Ганта проекта
2. Нажимает кнопку «Экспорт» / «Общий доступ»
3. Указывает диапазон дат, который должен отображаться на диаграмме
4. Система генерирует уникальную ссылку (UUID) и показывает её пользователю
5. Пользователь копирует ссылку и передаёт заинтересованным лицам
### Управление ссылками
- Вызывается через меню экспорта → модальное окно «Общий доступ»
- В модальном окне отображается список созданных ссылок с указанием диапазона дат
- Каждую ссылку можно **удалить** (полное удаление из БД, не soft delete)
- Ссылки **нельзя редактировать** — только создавать и удалять
- Ограничений на количество активных ссылок нет
- Статистика просмотров (сколько раз открывали) — **не нужна**
---
## Пользовательский сценарий (зритель по ссылке)
1. Зритель переходит по ссылке (без авторизации)
2. Открывается отдельная страница с диаграммой Ганта
3. Зритель видит:
- Задачи и вехи, попадающие в заданный диапазон
- Секции (заголовки группировок)
- Таймлайн с цветовой раскраской задач
4. Зритель может:
- Масштабировать таймлайн
- Переключать отображение «по ячейкам» / «по дням»
5. Зритель **не может**:
- Создавать, редактировать, удалять задачи / секции / вехи
- Видеть любые контролы управления (кнопки создания, контекстные меню, drag-and-drop и т.д.)
- Авторизоваться через эту страницу
---
## Данные и фильтрация
### Что попадает в представление
Задачи и вехи, у которых хотя бы одно из условий верно:
- Дата начала попадает в диапазон ссылки
- Дата конца попадает в диапазон ссылки
- Задача начинается до диапазона и заканчивается после (полностью перекрывает)
Секции включаются, если в них есть хотя бы одна попавшая задача.
### API возвращает
- Только задачи и вехи, попадающие в диапазон (не всю диаграмму)
- Информацию о секциях, содержащих попавшие задачи
- Минимальный набор полей, необходимый для отрисовки (без внутренних ID пользователей и т.п.)
---
## Технические требования
### Ссылки
- Формат: UUID v4 (каждый раз новый)
- Срок действия: бессрочно (пока не удалена)
- Удаление: **жёсткое** (hard delete из БД)
### Backend (Go API)
#### Таблица БД: `gantt_public_links`
- `id` (UUID, PK)
- `project_id` (FK → projects)
- `date_from` (date)
- `date_to` (date)
- `created_by` (FK → users)
- `created_at` (timestamp)
#### Endpoints
- `POST /api/v1/gantt/:projectId/public-links` — создать ссылку (авторизован, участник проекта)
- Body: `{ dateFrom, dateTo }`
- Response: `{ url: "https://leadera.pro/share/<uuid>" }`
- `GET /api/v1/gantt/:projectId/public-links` — список ссылок проекта (авторизован, участник)
- `DELETE /api/v1/gantt/public-links/:uuid` — удалить ссылку (авторизован, создатель)
- `GET /api/v1/public/gantt/:uuid` — получить данные диаграммы по ссылке (без авторизации)
- Response: задачи, вехи, секции в рамках диапазона
#### Rate limiting
- На публичный endpoint `GET /api/v1/public/gantt/:uuid` — rate limiting для защиты от перебора
- Рекомендация: 60 запросов в минуту на IP
### Frontend (Angular)
#### Модальное окно «Общий доступ»
- Вызывается из меню экспорта
- Содержит:
- Форму создания ссылки (диапазон дат + кнопка «Создать»)
- Список существующих ссылок (диапазон + URL + кнопка «Копировать» + кнопка «Удалить»)
#### Публичная страница `/share/:uuid`
- Отдельный route, **не требует авторизации**
- Отображает диаграмму Ганта в read-only режиме
- Доступны только: масштабирование таймлайна, переключение ячейки/дни
- Все контролы управления скрыты (удалены из шаблона, не просто disabled)
- Минимальный layout — без навигации проекта, без сайдбара
---
## Открытые вопросы
_(Нет)_