using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Foxel.Models; using Foxel.Models.Request.User; using Foxel.Models.Response.User; using Foxel.Controllers; using Foxel.Services.Management; namespace Foxel.Api.Management; [Authorize(Roles = "Administrator")] [Route("api/management/user")] public class UserManagementController(IUserManagementService userManagementService) : BaseApiController { [HttpGet("get_users")] public async Task>> GetUsers( [FromQuery] int page = 1, [FromQuery] int pageSize = 10, [FromQuery] string? searchQuery = null, [FromQuery] string? role = null, [FromQuery] DateTime? startDate = null, [FromQuery] DateTime? endDate = null) { try { DateTime? utcStartDate = null; DateTime? utcEndDate = null; if (startDate.HasValue) { utcStartDate = startDate.Value.Kind == DateTimeKind.Utc ? startDate.Value : DateTime.SpecifyKind(startDate.Value, DateTimeKind.Utc); } if (endDate.HasValue) { utcEndDate = endDate.Value.Kind == DateTimeKind.Utc ? endDate.Value : DateTime.SpecifyKind(endDate.Value, DateTimeKind.Utc); } var users = await userManagementService.GetUsersAsync(page, pageSize, searchQuery, role, utcStartDate, utcEndDate); return PaginatedSuccess(users.Data, users.TotalCount, users.Page, users.PageSize); } catch (Exception ex) { return PaginatedError($"获取用户列表失败: {ex.Message}", 500); } } [HttpGet("get_user/{id}")] public async Task>> GetUserById(int id) { try { var user = await userManagementService.GetUserByIdAsync(id); return Success(user, "用户获取成功"); } catch (KeyNotFoundException) { return Error("找不到指定用户", 404); } catch (Exception ex) { return Error($"获取用户失败: {ex.Message}", 500); } } [HttpPost("create_user")] public async Task>> CreateUser([FromBody] CreateUserRequest request) { try { var user = await userManagementService.CreateUserAsync(request.UserName, request.Email, request.Password, request.Role); return Success(user, "用户创建成功"); } catch (ArgumentException ex) { return Error(ex.Message); } catch (Exception ex) { return Error($"创建用户失败: {ex.Message}", 500); } } [HttpPost("update_user")] public async Task>> UpdateUser([FromBody] UpdateUserRequest request) { try { var user = await userManagementService.UpdateUserAsync(request.Id, request.UserName, request.Email, request.Role); return Success(user, "用户更新成功"); } catch (KeyNotFoundException) { return Error("找不到要更新的用户", 404); } catch (ArgumentException ex) { return Error(ex.Message); } catch (Exception ex) { return Error($"更新用户失败: {ex.Message}", 500); } } [HttpPost("delete_user")] public async Task>> DeleteUser([FromBody] int id) { try { var result = await userManagementService.DeleteUserAsync(id); return Success(result, "用户删除成功"); } catch (KeyNotFoundException) { return Error("找不到要删除的用户", 404); } catch (Exception ex) { return Error($"删除用户失败: {ex.Message}", 500); } } [HttpPost("batch_delete_users")] public async Task>> BatchDeleteUsers([FromBody] List ids) { try { if (ids.Count == 0) { return Error("未提供用户ID"); } var result = await userManagementService.BatchDeleteUsersAsync(ids); return Success(result, $"成功删除 {result.SuccessCount} 个用户,失败 {result.FailedCount} 个"); } catch (Exception ex) { return Error($"批量删除用户失败: {ex.Message}", 500); } } [HttpGet("get_user_detail/{id}")] public async Task>> GetUserDetail(int id) { try { var userDetail = await userManagementService.GetUserDetailAsync(id); return Success(userDetail, "用户详情获取成功"); } catch (KeyNotFoundException) { return Error("找不到指定用户", 404); } catch (Exception ex) { return Error($"获取用户详情失败: {ex.Message}", 500); } } }