Технический долг (Projects)

🔴 Критическое

  • Отсутствие валидации прав при удалении доски – проверка есть (canDeleteBoard), но она не учитывает, что в доске могут быть задачи. Удаление каскадом не настроено, может нарушить целостность.
  • Нет ограничения на количество участников в проекте – потенциальная нагрузка.

🟡 Важное

  • Проекты типа personal не должны удаляться, но в коде это проверяется только через canDeleteProject. Лучше вынести в доменную логику (метод Project::isDeletable()).
  • Методы canViewBoard и canViewProject используют прямой доступ к репозиториям – можно закешировать списки доступных проектов/досок.
  • ProjectAccess содержит много методов, стоит разбить на несколько сервисов (например, ProjectPermission, BoardPermission).

🟢 Плановые улучшения

  • Реализовать мягкое удаление проектов (архивация с возможностью восстановления).
  • Ограничить количество досок в проекте (сейчас максимум 4, но это хардкод).

🟢 Исправленное

  • Добавлена событийная модель для приглашений – теперь создание, принятие, отмена приглашений генерируют события, которые логируются и могут быть обработаны другими модулями.
  • Реализован механизм приглашений по email – с проверкой существования пользователя в Passport, токенами и сроком действия. Закрывает потребность в управлении участниками через email.
  • Добавлен InvitationLoggerListener – логирует все действия с приглашениями.

🟢 Новые возможности

  • Форвардинг всех событий модуля Projects в глобальную шину (см. docs/project/events.md).