Весь контент перенесён в content/yasha/ (7 подразделов). Создан content/semen/ с подразделами: changelog, kb, diary. Навигация — dropdown в навбаре, двухуровневое меню в hugo.toml. Шаблоны, сайдбар, поиск обновлены под вложенные секции.
126 lines
6.8 KiB
Markdown
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 — без навигации проекта, без сайдбара
|
|
|
|
---
|
|
|
|
## Открытые вопросы
|
|
|
|
_(Нет)_
|