Возможности системы TASKFLOW CRM

Этот документ описывает функциональные возможности системы на уровне бизнес-логики: что умеет система, какие есть модули, как они связаны. Технические детали — в разделах core/ и modules/.

TASKFLOW CRM — система управления задачами и проектами для креативных агентств и личного использования. Построена на принципах DDD и Clean Architecture. API — RESTful, JSON.


Сводная таблица возможностей

ОбластьВозможностьМодульСтатус
АутентификацияSSO-вход через внешний сервис Passportpassport/auth✅
АутентификацияАвтоматический refresh токеновpassport/auth✅
АутентификацияВыход (proxy на Passport)passport/auth✅
АвторизацияРоли пользователей (user, admin)core + rbac✅
АвторизацияРазрешения (permissions) с wildcard-соответствиемrbac✅
АвторизацияКонтроль доступа к маршрутам (RBAC middleware)rbac✅
ПользователиСинхронизация локальных пользователей с Passportcore✅
ПроектыСоздание/редактирование/удаление проектовprojects✅
ПроектыТипы проектов (личный, командный…)projects✅
ПроектыУчастники проекта и роли внутри проектаprojects✅
ПроектыПриглашения по email и их принятие/отменаprojects✅
ПроектыАвтосоздание личного проекта при первом входеprojects✅
ДоскиКанбан-доски внутри проектовprojects + tasks✅
ДоскиКолонки досок с сортировкой (reorder)tasks✅
ЗадачиСоздание, редактирование, удаление задачtasks✅
ЗадачиМягкое удаление (soft delete) и восстановлениеtasks✅
ЗадачиЖёсткое удаление (hard delete)tasks✅
ЗадачиНазначение исполнителя (assign)tasks✅
ЗадачиПеренос между колонками канбанаtasks✅
ЗадачиВложенные задачи (parent_id)tasks✅
ЗадачиПриоритеты задачtasks✅
ЗадачиДедлайны и признак просроченностиtasks✅
ЗадачиКомментарии к задачамtasks✅
ЗадачиСтикеры/теги и привязка к задачамtasks✅
Тайм-трекингТаймеры (старт/стоп)tasks✅
Тайм-трекингРучное логирование интерваловtasks✅
Тайм-трекингПланируемое время (planned fields)tasks✅
Тайм-трекингДневная сводка (daily summary)tasks✅
Тайм-трекингСводка времени по задачеtasks✅
Тайм-трекингДиаграмма занятости пользователя (busy chart)tasks✅
Тайм-трекингАвтостарт таймера при назначении/переносеtasks✅
УведомленияEmail-уведомления (приглашения, обратная связь)core + задачи✅
УведомленияPush/Telegram-каналы (каркас)core🚧 каркас
Обратная связьОценка сервиса (4 критерия 0–5)feedback✅
Обратная связьИдеи по улучшениюfeedback✅
Обратная связьСтатистика оценокfeedback✅
Обратная связьEmail при не максимальной оценкеfeedback✅
ДокументацияSwagger/OpenAPI + Markdown-доки в вебеcore✅

🚧 — реализован каркас, полная интеграция в планах (см. known-issues-and-roadmap).


Ключевые пользовательские сценарии

1. Вход в систему (SSO)

  1. Пользователь открывает фронтенд и нажимает «Войти».
  2. Фронтенд редиректит на GET /auth/login API.
  3. API создаёт state (случайная строка, кука taskflow_oauth_state на 10 минут) и редиректит на Passport /auth/authorize.
  4. Пользователь входит на Passport, Passport редиректит обратно на GET /auth/callback?code=...&state=....
  5. API меняет code на пару токенов (access + refresh), кладёт их в httpOnly-куки и редиректит на фронтенд.
  6. При первом входе создаётся личный проект пользователя.

2. Работа с задачами на канбан-доске

  1. Пользователь открывает проект → видит доску с колонками.
  2. При переносе задачи в другую колонку вызывается POST task/<id>/move-to-column.
  3. Задача может быть назначена исполнителю (POST task/<id>/assign).
  4. Если колонка/назначение меняются — система может автоматически запустить таймер учета времени.

3. Учёт рабочего времени

  1. Пользователь запускает таймер (POST time-interval/start), останавливает (POST time-interval/stop).
  2. Можно добавить интервал вручную (POST time-interval).
  3. Система ведёт daily summary и считает время по задачам; строит диаграмму занятости пользователя.

4. Приглашение участника в проект

  1. Владелец проекта вызывает POST project/<id>/invite с email.
  2. Система создаёт приглашение и отправляет email.
  3. Пользователь переходит по ссылке, вызывает POST invitation/accept — становится участником.
  4. Приглашение можно отменить (DELETE project/<id>/invitation).

5. Обратная связь

  1. Пользователь ставит оценку (скорость, функциональность, дизайн, удобство) — POST feedback/rating.
  2. Если оценка не максимальная — на email приходит письмо с просьбой рассказать о проблемах.
  3. Пользователь может отправить идею — POST feedback/idea.

Модули и их взаимодействие

graph LR
    subgraph Внешние системы
        PASS[Passport<br/>SSO / OAuth2]
    end

    subgraph API
        AUTH[modules/passport/auth]
        RBAC[modules/rbac]
        PROJ[modules/projects]
        TASKS[modules/tasks]
        FEED[modules/feedback]
        CORE[core<br/>users, roles, events,<br/>notifications, errors]
    end

    AUTH -->|JWT-токены| CORE
    AUTH -->|SyncUser| CORE
    RBAC -->|проверка маршрутов| CORE
    PROJ -->|UserFirstLoginEvent| CORE
    TASKS -->|доски, доступ| PROJ
    TASKS -->|события/уведомления| CORE
    FEED -->|RatingSubmittedEvent| CORE
    PROJ -->|события/уведомления| CORE

Ключевые точки интеграции:

Подробности взаимодействия — в диаграммах и документации каждого модуля.


Форматы ответов API (кратко)

Все ответы имеют единую структуру (подробно: фронтенд-гид):

ОбёрткаФормат
Один объект{ "item": { ... } }
Список{ "items": [ ... ], "_meta": { "total", "page", "limit", "pages" } }
Успех без данных{ "message": "OK" }
Ошибка{ "error": { "code", "message", "details" } }