using HopFrame.Database.Models; using HopFrame.Database.Repositories; namespace HopFrame.Api.Logic.Implementation; internal sealed class GroupLogic(IGroupRepository groups, IUserRepository users) : IGroupLogic { public async Task>> GetGroups() { return LogicResult>.Ok(await groups.GetPermissionGroups()); } public async Task>> GetDefaultGroups() { return LogicResult>.Ok(await groups.GetDefaultGroups()); } public async Task>> GetUserGroups(string id) { if (!Guid.TryParse(id, out var userId)) return LogicResult>.BadRequest("Invalid user id"); var user = await users.GetUser(userId); if (user is null) return LogicResult>.NotFound("That user does not exist"); return LogicResult>.Ok(await groups.GetUserGroups(user)); } public async Task> GetGroup(string name) { var group = await groups.GetPermissionGroup(name); if (group is null) return LogicResult.NotFound("That group does not exist"); return LogicResult.Ok(group); } public async Task> CreateGroup(PermissionGroup group) { if (group is null) return LogicResult.BadRequest("Provide a group"); if (!group.Name.StartsWith("group.")) return LogicResult.BadRequest("Group names must start with 'group.'"); if (await groups.GetPermissionGroup(group.Name) != null) return LogicResult.Conflict("That group already exists"); return LogicResult.Ok(await groups.CreatePermissionGroup(group)); } public async Task> UpdateGroup(PermissionGroup group) { if (await groups.GetPermissionGroup(group.Name) == null) return LogicResult.NotFound("That user does not exist"); await groups.EditPermissionGroup(group); return LogicResult.Ok(group); } public async Task DeleteGroup(string name) { var group = await groups.GetPermissionGroup(name); if (group is null) return LogicResult.NotFound("That group does not exist"); await groups.DeletePermissionGroup(group); return LogicResult.Ok(); } }