xiangyixiangqin/server/src/XiangYi.AdminApi/Controllers/AdminUserController.cs
2026-01-21 19:36:36 +08:00

156 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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