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 });
}
}
}