namespace Fengling.Console.Controllers; /// /// 用户管理控制器 /// 提供用户的增删改查以及密码重置等功能 /// [ApiController] [Route("api/console/[controller]")] [Authorize(AuthenticationSchemes = OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme)] public class UsersController : ControllerBase { private readonly IUserService _userService; private readonly ILogger _logger; public UsersController(IUserService userService, ILogger logger) { _userService = userService; _logger = logger; } /// /// 获取用户列表 /// /// 分页查询参数,支持按用户名、邮箱和租户ID筛选 /// 分页的用户列表,包含用户基本信息和状态 /// 成功返回用户分页列表 /// 服务器内部错误 [HttpGet] [Produces("application/json")] [ProducesResponseType(typeof(PagedResultDto), StatusCodes.Status200OK)] [ProducesResponseType(typeof(object), StatusCodes.Status500InternalServerError)] public async Task>> GetUsers([FromQuery] UserQueryDto query) { try { var (items, totalCount) = await _userService.GetUsersAsync(query.Page, query.PageSize, query.UserName, query.Email, query.TenantId); var result = new PagedResultDto { Items = items.ToList(), TotalCount = totalCount, Page = query.Page, PageSize = query.PageSize }; return Ok(result); } catch (Exception ex) { _logger.LogError(ex, "Error getting users"); return StatusCode(500, new { message = ex.Message }); } } /// /// 获取单个用户详情 /// /// 用户ID /// 用户的详细信息,包括角色、租户等信息 /// 成功返回用户详情 /// 用户不存在 /// 服务器内部错误 [HttpGet("{id}")] [Produces("application/json")] [ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)] [ProducesResponseType(typeof(object), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(object), StatusCodes.Status500InternalServerError)] public async Task> GetUser(long id) { try { var user = await _userService.GetUserAsync(id); if (user == null) { return NotFound(); } return Ok(user); } catch (Exception ex) { _logger.LogError(ex, "Error getting user {UserId}", id); return StatusCode(500, new { message = ex.Message }); } } /// /// 创建新用户 /// /// 创建用户所需的配置信息 /// 创建的用户详情 /// 成功创建用户 /// 请求参数无效或用户名/邮箱已存在 /// 服务器内部错误 [HttpPost] [Produces("application/json")] [ProducesResponseType(typeof(UserDto), StatusCodes.Status201Created)] [ProducesResponseType(typeof(object), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(object), StatusCodes.Status500InternalServerError)] public async Task> CreateUser([FromBody] CreateUserDto dto) { try { var user = await _userService.CreateUserAsync(dto); return CreatedAtAction(nameof(GetUser), new { id = user.Id }, user); } catch (InvalidOperationException ex) { _logger.LogWarning(ex, "Validation error creating user"); return BadRequest(new { message = ex.Message }); } catch (Exception ex) { _logger.LogError(ex, "Error creating user"); return StatusCode(500, new { message = ex.Message }); } } /// /// 更新用户信息 /// /// 用户ID /// 需要更新的用户配置信息 /// 无内容响应 /// 成功更新用户 /// 用户不存在 /// 服务器内部错误 [HttpPut("{id}")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(typeof(object), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(object), StatusCodes.Status500InternalServerError)] public async Task UpdateUser(long id, [FromBody] UpdateUserDto dto) { try { await _userService.UpdateUserAsync(id, dto); return NoContent(); } catch (KeyNotFoundException ex) { _logger.LogWarning(ex, "User not found: {UserId}", id); return NotFound(); } catch (Exception ex) { _logger.LogError(ex, "Error updating user {UserId}", id); return StatusCode(500, new { message = ex.Message }); } } /// /// 重置用户密码 /// /// 用户ID /// 包含新密码的请求体 /// 无内容响应 /// 成功重置密码 /// 用户不存在 /// 密码不符合复杂度要求 /// 服务器内部错误 [HttpPut("{id}/password")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(typeof(object), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(object), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(object), StatusCodes.Status500InternalServerError)] public async Task ResetPassword(long id, [FromBody] ResetPasswordDto dto) { try { await _userService.ResetPasswordAsync(id, dto); return NoContent(); } catch (KeyNotFoundException ex) { _logger.LogWarning(ex, "User not found: {UserId}", id); return NotFound(); } catch (InvalidOperationException ex) { _logger.LogWarning(ex, "Validation error resetting password for user {UserId}", id); return BadRequest(new { message = ex.Message }); } catch (Exception ex) { _logger.LogError(ex, "Error resetting password for user {UserId}", id); return StatusCode(500, new { message = ex.Message }); } } /// /// 删除用户 /// /// 用户ID /// 无内容响应 /// 成功删除用户 /// 用户不存在 /// 服务器内部错误 [HttpDelete("{id}")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(typeof(object), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(object), StatusCodes.Status500InternalServerError)] public async Task DeleteUser(long id) { try { await _userService.DeleteUserAsync(id); return NoContent(); } catch (KeyNotFoundException ex) { _logger.LogWarning(ex, "User not found: {UserId}", id); return NotFound(); } catch (Exception ex) { _logger.LogError(ex, "Error deleting user {UserId}", id); return StatusCode(500, new { message = ex.Message }); } } }