Технический долг (Projects)
🔴 Критическое
- Отсутствие валидации прав при удалении доски – проверка есть (
canDeleteBoard), но она не учитывает, что в доске могут быть задачи. Удаление каскадом не настроено, может нарушить целостность.
- Нет ограничения на количество участников в проекте – потенциальная нагрузка.
🟡 Важное
- Проекты типа
personal не должны удаляться, но в коде это проверяется только через canDeleteProject. Лучше вынести в доменную логику (метод Project::isDeletable()).
- Методы
canViewBoard и canViewProject используют прямой доступ к репозиториям – можно закешировать списки доступных проектов/досок.
ProjectAccess содержит много методов, стоит разбить на несколько сервисов (например, ProjectPermission, BoardPermission).
🟢 Плановые улучшения
- Реализовать мягкое удаление проектов (архивация с возможностью восстановления).
- Ограничить количество досок в проекте (сейчас максимум 4, но это хардкод).
🟢 Исправленное
- Добавлена событийная модель для приглашений – теперь создание, принятие, отмена приглашений генерируют события, которые логируются и могут быть обработаны другими модулями.
- Реализован механизм приглашений по email – с проверкой существования пользователя в Passport, токенами и сроком действия. Закрывает потребность в управлении участниками через email.
- Добавлен
InvitationLoggerListener – логирует все действия с приглашениями.
🟢 Новые возможности
- Форвардинг всех событий модуля Projects в глобальную шину (см.
docs/project/events.md).