using Diligent.WebAPI.Contracts.DTOs.User; using Diligent.WebAPI.Data.Entities; namespace Diligent.WebAPI.Host.Controllers.V1 { [ApiVersion("1.0")] [Route("v{version:apiVersion}/users")] [ApiController] public class UsersController : ControllerBase { private readonly IUserService _userService; private readonly IMapper _mapper; public UsersController(IUserService userService, IMapper mapper) { _userService = userService; _mapper = mapper; } [Authorize] [HttpGet] public async Task GetAll() { return Ok(_mapper.Map, IEnumerable>(await _userService.GetAll())); } [Authorize] [HttpPost("toggleEnable/{id}")] public async Task ToggleEnable(int id) { var user = await _userService.GetById(id); if (user == null) { return BadRequest("User not found"); } await _userService.ToggleEnable(user); return Ok(user.Id); } [Authorize] [HttpDelete("{id}")] public async Task DeleteUser(int id) { var user = await _userService.GetById(id); if (user == null) { return BadRequest("User not found"); } await _userService.RemoveUser(user); return Ok(user.Id); } [Authorize] [HttpGet("{id}")] public async Task GetUser(int id) { var user = await _userService.GetById(id); if (user == null) { return BadRequest("User not found"); } return Ok(_mapper.Map(user)); } [Authorize] [HttpPost("invite")] public async Task InviteUser([FromBody] InviteDTO invite) { var response = await _userService.SendRegistrationLink(invite); if (response.IsError is true) return BadRequest(new { message = response.ErrorMessage }); return Ok(response.Data); } [Authorize] [HttpPost("verify-invite")] public async Task VerifyInvite(string email, string token) { // controller endpoint currently used only for testing // user should be enabled to log in after accepting invite and updating his account var user = await _userService.GetByEmail(email); var result = await _userService.VerifyToken(user, token); return Ok(result); } [Authorize] [HttpPost] public async Task CreateUser([FromBody] CreateUserRequestDto model) { await _userService.CreateUser(model); return Ok(); } } }