156 lines
5.0 KiB
C#
156 lines
5.0 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using System.Security.Claims;
|
||
using XiangYi.Application.DTOs.Requests;
|
||
using XiangYi.Application.DTOs.Responses;
|
||
using XiangYi.Application.Interfaces;
|
||
|
||
namespace XiangYi.AdminApi.Controllers;
|
||
|
||
/// <summary>
|
||
/// 后台用户管理控制器
|
||
/// </summary>
|
||
[ApiController]
|
||
[Route("api/admin/users")]
|
||
[Authorize]
|
||
public class AdminUserController : ControllerBase
|
||
{
|
||
private readonly IAdminUserService _adminUserService;
|
||
private readonly ILogger<AdminUserController> _logger;
|
||
|
||
public AdminUserController(IAdminUserService adminUserService, ILogger<AdminUserController> logger)
|
||
{
|
||
_adminUserService = adminUserService;
|
||
_logger = logger;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取用户列表
|
||
/// </summary>
|
||
/// <param name="request">查询请求</param>
|
||
/// <returns>分页用户列表</returns>
|
||
[HttpGet]
|
||
public async Task<ApiResponse<PagedResult<AdminUserListDto>>> GetUserList([FromQuery] AdminUserQueryRequest request)
|
||
{
|
||
var result = await _adminUserService.GetUserListAsync(request);
|
||
return ApiResponse<PagedResult<AdminUserListDto>>.Success(result);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取用户详情
|
||
/// </summary>
|
||
/// <param name="id">用户ID</param>
|
||
/// <returns>用户详情</returns>
|
||
[HttpGet("{id}")]
|
||
public async Task<ApiResponse<AdminUserDetailDto>> GetUserDetail(long id)
|
||
{
|
||
var result = await _adminUserService.GetUserDetailAsync(id);
|
||
return ApiResponse<AdminUserDetailDto>.Success(result);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新用户状态
|
||
/// </summary>
|
||
/// <param name="id">用户ID</param>
|
||
/// <param name="request">状态更新请求</param>
|
||
/// <returns>操作结果</returns>
|
||
[HttpPut("{id}/status")]
|
||
public async Task<ApiResponse> UpdateUserStatus(long id, [FromBody] UpdateUserStatusRequest request)
|
||
{
|
||
var adminId = GetCurrentAdminId();
|
||
var result = await _adminUserService.UpdateUserStatusAsync(id, request.Status, adminId);
|
||
return result ? ApiResponse.Success("更新成功") : ApiResponse.Error(40001, "更新失败");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取用户统计数据
|
||
/// </summary>
|
||
/// <returns>统计数据</returns>
|
||
[HttpGet("statistics")]
|
||
public async Task<ApiResponse<AdminUserStatisticsDto>> GetUserStatistics()
|
||
{
|
||
var result = await _adminUserService.GetUserStatisticsAsync();
|
||
return ApiResponse<AdminUserStatisticsDto>.Success(result);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 创建测试用户
|
||
/// </summary>
|
||
/// <param name="request">创建请求</param>
|
||
/// <returns>创建的用户ID列表</returns>
|
||
[HttpPost("test-users")]
|
||
public async Task<ApiResponse<List<long>>> CreateTestUsers([FromBody] CreateTestUsersRequest request)
|
||
{
|
||
if (request.Count <= 0 || request.Count > 50)
|
||
{
|
||
return ApiResponse<List<long>>.Error(40001, "创建数量必须在1-50之间");
|
||
}
|
||
|
||
var result = await _adminUserService.CreateTestUsersAsync(request.Count, request.Gender);
|
||
return ApiResponse<List<long>>.Success(result, $"成功创建{result.Count}个测试用户");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取当前管理员ID
|
||
/// </summary>
|
||
private long GetCurrentAdminId()
|
||
{
|
||
var adminIdClaim = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
|
||
return long.TryParse(adminIdClaim, out var adminId) ? adminId : 0;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除用户(硬删除)
|
||
/// </summary>
|
||
/// <param name="id">用户ID</param>
|
||
/// <returns>操作结果</returns>
|
||
[HttpDelete("{id}")]
|
||
public async Task<ApiResponse> DeleteUser(long id)
|
||
{
|
||
var adminId = GetCurrentAdminId();
|
||
var result = await _adminUserService.DeleteUserAsync(id, adminId);
|
||
return result ? ApiResponse.Success("删除成功") : ApiResponse.Error(40001, "删除失败");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新用户联系次数
|
||
/// </summary>
|
||
/// <param name="id">用户ID</param>
|
||
/// <param name="request">联系次数更新请求</param>
|
||
/// <returns>操作结果</returns>
|
||
[HttpPut("{id}/contact-count")]
|
||
public async Task<ApiResponse> UpdateContactCount(long id, [FromBody] UpdateContactCountRequest request)
|
||
{
|
||
var adminId = GetCurrentAdminId();
|
||
var result = await _adminUserService.UpdateContactCountAsync(id, request.ContactCount, adminId);
|
||
return result ? ApiResponse.Success("更新成功") : ApiResponse.Error(40001, "更新失败");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 创建测试用户请求
|
||
/// </summary>
|
||
public class CreateTestUsersRequest
|
||
{
|
||
/// <summary>
|
||
/// 创建数量(1-50)
|
||
/// </summary>
|
||
public int Count { get; set; } = 10;
|
||
|
||
/// <summary>
|
||
/// 性别:1男 2女,null则随机
|
||
/// </summary>
|
||
public int? Gender { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新联系次数请求
|
||
/// </summary>
|
||
public class UpdateContactCountRequest
|
||
{
|
||
/// <summary>
|
||
/// 联系次数
|
||
/// </summary>
|
||
public int ContactCount { get; set; }
|
||
}
|