using Govor.Application.Infrastructure.AdminsStuff; using Govor.Contracts.Responses.Admins; using Govor.Domain.Models.Users; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Govor.API.Controllers.AdminStuff; [ApiController] [Route("api/admin/[controller]")] [Authorize(Roles = "Admin")] public class UsersController : Controller { private readonly ILogger _logger; private readonly IUsersAdministration _users; public UsersController(ILogger logger, IUsersAdministration users, IInvitationGenerator invitationGenerator) { _logger = logger; _users = users; } [HttpGet] public async Task AllUsers() { try { _logger.LogInformation("Getting all users by administrator"); var read = await _users.GetAllUsersAsync(); return Ok(BuildUserDtos(read)); } catch (Exception e) { _logger.LogError(e, e.Message); return StatusCode(500, e.Message); } } [HttpGet("{id:guid}")] public async Task GetUserById(Guid id) { try { _logger.LogInformation($"Getting user {id} by administrator"); var read = await _users.GetUserById(id); return Ok(BuildUserDtos([read]).First()); } catch (Exception e) { _logger.LogError(e, e.Message); return StatusCode(500, e.Message); } } [HttpGet("user/{id:guid}/setpassword/{password}")] public async Task SetNewPassword(Guid id, string password) { try { await _users.SetPasswordAsync(id, password); return Ok(); } catch (Exception ex) { return StatusCode(500, ex.Message); } } private List BuildUserDtos(IEnumerable users) => users.Select(user => new UserResponse { Id = user.Id, Username = user.Username, Description = user.Description, WasOnline = user.WasOnline, IconId = user.IconId, PasswordHash = user.PasswordHash, InviteId = user.InviteId, CreatedOn = user.CreatedOn, IsAdmin = user.Invite?.IsAdmin ?? false, }).ToList(); }