Группа - oyboy/Jora GitHub Wiki
Группа не является классовой моделью в том смысле, что для неё не предусмотрено наличие отдельного класса. Концептуально группу можно описать как набор пользователей, принадлежащих определённому проекту, при этом в группе всегда есть чёткое разделение ролей: один является создателем, второй - модератором (назначается создателем), остальные - участниками. К пользователям можно добавлять теги. Если пользователь является простым участником, то на него эти теги никакого влияния не указывают. Однако, если тот является модератором, то теги будут использоваться для более релевантого поиска модератора, когда какой-то пользователь в группе отправляет запрос о помощи.
Контроллер GroupController
предоставляет функциональность для работы с тегами, управления ролями пользователей и блокировки пользователей.
-
getTagsForThisProject
: Получает список тегов для заданного проекта по его хешу. -
getUsersWithTags
: Возвращает список пользователей с их ролями и тегами, связанными с проектом. -
getCurrentUserRole
: Определяет роль текущего пользователя в проекте. -
getUser
: Получает информацию о текущем аутентифицированном пользователе. -
getGroup
: Отображает страницу группы, проверяя доступ текущего пользователя по его роли. -
addTag
: Обрабатывает добавление нового тега к проекту, с обработкой ошибок. -
setTag
: Устанавливает тег для конкретного пользователя в проекте. -
banUser
: Блокирует пользователя в проекте, с проверкой на наличие ошибок. -
changeUserRole
: Изменяет роль пользователя в проекте, согласно указанному действию (повышение или понижение).
-
changeUserRole
: Изменяет роль пользователя в проекте. В зависимости от действия ("PROMOTE" или "DEMOTE") обновляет текущую роль пользователя. -
banUser
: Блокирует или разблокирует пользователя в проекте, обновляя соответствующий статус в базе данных. -
createTag
: Создает новый тег для проекта, проверяя длину имени тега и наличие существующего тега с таким же именем. -
setTagToUser
: Устанавливает или удаляет тег у пользователя в зависимости от его текущего состояния. -
changeRole
: Вспомогательный метод, осуществляющий привязку новой роли пользователя и сохранение изменений в базе данных.
Для работы используются 4 репозитория: UserProjectRoleReposirory, ProjectRepository, UserRepository и tagRepository
@Query("SELECT upr " +
"FROM UserProjectRole upr " +
"WHERE upr.project.id = :projectId AND upr.banned = false")
List<UserProjectRole> findUsersAndRolesByProjectId(@Param("projectId") Long projectId);
UserProjectRole getUserProjectRoleByUserAndProject(User user, Project project);
@Query("SELECT p.id FROM Project p WHERE p.hash = :hash")
Long findIdByHash(@Param("hash") String hash);
@Query("SELECT t FROM Tag t JOIN t.projects p WHERE p.id = :projectId")
List<Tag> findTagsByProjectId(@Param("projectId") Long projectId);