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;
///
/// 后台用户管理控制器
///
[ApiController]
[Route("api/admin/users")]
[Authorize]
public class AdminUserController : ControllerBase
{
private readonly IAdminUserService _adminUserService;
private readonly ILogger _logger;
public AdminUserController(IAdminUserService adminUserService, ILogger logger)
{
_adminUserService = adminUserService;
_logger = logger;
}
///
/// 获取用户列表
///
/// 查询请求
/// 分页用户列表
[HttpGet]
public async Task>> GetUserList([FromQuery] AdminUserQueryRequest request)
{
var result = await _adminUserService.GetUserListAsync(request);
return ApiResponse>.Success(result);
}
///
/// 获取用户详情
///
/// 用户ID
/// 用户详情
[HttpGet("{id}")]
public async Task> GetUserDetail(long id)
{
var result = await _adminUserService.GetUserDetailAsync(id);
return ApiResponse.Success(result);
}
///
/// 更新用户状态
///
/// 用户ID
/// 状态更新请求
/// 操作结果
[HttpPut("{id}/status")]
public async Task 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, "更新失败");
}
///
/// 获取用户统计数据
///
/// 统计数据
[HttpGet("statistics")]
public async Task> GetUserStatistics()
{
var result = await _adminUserService.GetUserStatisticsAsync();
return ApiResponse.Success(result);
}
///
/// 创建测试用户
///
/// 创建请求
/// 创建的用户ID列表
[HttpPost("test-users")]
public async Task>> CreateTestUsers([FromBody] CreateTestUsersRequest request)
{
if (request.Count <= 0 || request.Count > 50)
{
return ApiResponse>.Error(40001, "创建数量必须在1-50之间");
}
var result = await _adminUserService.CreateTestUsersAsync(request.Count, request.Gender);
return ApiResponse>.Success(result, $"成功创建{result.Count}个测试用户");
}
///
/// 获取当前管理员ID
///
private long GetCurrentAdminId()
{
var adminIdClaim = User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
return long.TryParse(adminIdClaim, out var adminId) ? adminId : 0;
}
///
/// 删除用户(硬删除)
///
/// 用户ID
/// 操作结果
[HttpDelete("{id}")]
public async Task DeleteUser(long id)
{
var adminId = GetCurrentAdminId();
var result = await _adminUserService.DeleteUserAsync(id, adminId);
return result ? ApiResponse.Success("删除成功") : ApiResponse.Error(40001, "删除失败");
}
///
/// 更新用户联系次数
///
/// 用户ID
/// 联系次数更新请求
/// 操作结果
[HttpPut("{id}/contact-count")]
public async Task 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, "更新失败");
}
}
///
/// 创建测试用户请求
///
public class CreateTestUsersRequest
{
///
/// 创建数量(1-50)
///
public int Count { get; set; } = 10;
///
/// 性别:1男 2女,null则随机
///
public int? Gender { get; set; }
}
///
/// 更新联系次数请求
///
public class UpdateContactCountRequest
{
///
/// 联系次数
///
public int ContactCount { get; set; }
}