using BotSharp.Abstraction.Roles; using BotSharp.Abstraction.Users.Enums; namespace BotSharp.OpenAPI.Controllers; [Authorize] [ApiController] public class RoleController : ControllerBase { private readonly IServiceProvider _services; private readonly IRoleService _roleService; private readonly IUserIdentity _user; public RoleController( IServiceProvider services, IRoleService roleService, IUserIdentity user) { _services = services; _roleService = roleService; _user = user; } [HttpPost("/role/refresh")] public async Task RefreshRoles() { var isValid = await IsValidUser(); if (!isValid) { return false; } return await _roleService.RefreshRoles(); } [HttpGet("/role/options")] public async Task> GetRoleOptions() { return await _roleService.GetRoleOptions(); } [HttpPost("/roles")] public async Task> GetRoles([FromBody] RoleFilter? filter = null) { if (filter == null) { filter = RoleFilter.Empty(); } var isValid = await IsValidUser(); if (!isValid) { return Enumerable.Empty(); } var roles = await _roleService.GetRoles(filter); return roles.Select(x => RoleViewModel.FromRole(x)).ToList(); } [HttpGet("/role/{id}/details")] public async Task GetRoleDetails([FromRoute] string id) { var role = await _roleService.GetRoleDetails(id); return RoleViewModel.FromRole(role); } [HttpPut("/role")] public async Task UpdateRole([FromBody] RoleUpdateModel model) { if (model == null) return false; var isValid = await IsValidUser(); if (!isValid) { return false; } var role = RoleUpdateModel.ToRole(model); return await _roleService.UpdateRole(role, isUpdateRoleAgents: true); } private async Task IsValidUser() { var userService = _services.GetRequiredService(); return await userService.IsAuthorizedUser(_user.Id); } }