using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; /// /// Clinical user account management for hospital IT administrators. /// [ApiController] [Route("api/v1/users")] [Produces("application/json")] [Authorize] public class UsersController : ControllerBase { private readonly IUserService _users; public UsersController(IUserService users) => _users = users; /// Lists all clinical user accounts. [HttpGet] [AuthorizePermission(ClinicalPermissions.UsersAdmin)] [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] public async Task List() { var users = await _users.ListAsync(); return Ok(ApiResponse>.Ok(users)); } /// Creates a new clinical user account. [HttpPost] [AuthorizePermission(ClinicalPermissions.UsersAdmin)] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status201Created)] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status409Conflict)] public async Task Create([FromBody] CreateUserRequest req) { var user = await _users.CreateAsync(req); return StatusCode(201, ApiResponse.Created(user)); } /// Updates role, display name, or active status for a user. [HttpPatch("{id:guid}")] [AuthorizePermission(ClinicalPermissions.UsersAdmin)] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status404NotFound)] public async Task Update(Guid id, [FromBody] UpdateUserRequest req) { var user = await _users.UpdateAsync(id, req); return Ok(ApiResponse.Ok(user)); } }