using Microsoft.AspNetCore.Mvc;
using QYZH.InteractiveMagazine.IService;
using QYZH.InteractiveMagazine.Models.Common;
using QYZH.InteractiveMagazine.Models.Dto;
using QYZH.InteractiveMagazine.Models.Dto.CheckIn;
using QYZH.InteractiveMagazine.Models.Dto.Compensation;
using QYZH.InteractiveMagazine.Models.Dto.Points;
namespace QYZH.InteractiveMagazine.WebApi.Controllers;
///
/// 用户控制器
///
[Route("api/[controller]")]
[ApiController]
public class UsersController : BaseController
{
private readonly IUsersService _usersService;
private readonly ILogger _logger;
public UsersController(IUsersService usersService, ILogger logger)
{
_usersService = usersService;
_logger = logger;
}
///
/// 获取用户列表(分页)
///
[HttpGet]
public async Task>> GetList([FromQuery] UsersQueryInput input)
{
return await _usersService.GetListAsync(input);
}
///
/// 获取用户详情(仅基本信息)
///
[HttpGet("{id}")]
public async Task> GetDetail(long id)
{
return await _usersService.GetDetailAsync(id);
}
///
/// 分页查询用户积分记录
///
[HttpGet("{id}/pointsRecords")]
public async Task>> GetUserPointsRecords(long id, [FromQuery] PointsRecordQueryInput input)
{
return await _usersService.GetUserPointsRecordsAsync(id, input);
}
///
/// 分页查询用户签到记录
///
[HttpGet("{id}/checkInRecords")]
public async Task>> GetUserCheckInRecords(long id, [FromQuery] PageQueryModel input)
{
return await _usersService.GetUserCheckInRecordsAsync(id, input);
}
///
/// 分页查询用户补偿任务
///
[HttpGet("{id}/compensationTasks")]
public async Task>> GetUserCompensationTasks(long id, [FromQuery] CompensationTaskQueryInput input)
{
return await _usersService.GetUserCompensationTasksAsync(id, input);
}
///
/// 分页查询用户期刊列表
///
[HttpGet("{id}/journals")]
public async Task>> GetUserJournals(long id, [FromQuery] UserJournalQueryInput input)
{
return await _usersService.GetUserJournalsAsync(id, input);
}
///
/// 更新用户状态
///
[HttpPut("{id}/status")]
public async Task UpdateStatus(long id)
{
return await _usersService.UpdateStatusAsync(id);
}
///
/// 手动增加用户积分
///
[HttpPost("{userId}/points/add")]
public async Task> ManualAddPoints(long userId, [FromBody] ManualAddPointsInput input)
{
try
{
var operatorId = GetCurrentUserId() ?? 0;
var operatorName = GetCurrentUserName() ?? "Unknown";
var ipAddress = HttpContext.Connection.RemoteIpAddress?.ToString();
var result = await _usersService.ManualAddPointsAsync(userId, input, operatorId, operatorName, ipAddress);
return Success(result, "手动增加积分成功");
}
catch (BusinessException ex)
{
_logger.LogWarning(ex, "手动增加积分业务异常: {Message}", ex.Message);
return BaseResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "手动增加积分系统异常,UserId: {UserId}", userId);
return BaseResponse.Fail("手动增加积分失败,请稍后重试");
}
}
///
/// 手动扣除用户积分
///
[HttpPost("{userId}/points/deduct")]
public async Task> ManualDeductPoints(long userId, [FromBody] ManualDeductPointsInput input)
{
try
{
var operatorId = GetCurrentUserId() ?? 0;
var operatorName = GetCurrentUserName() ?? "Unknown";
var ipAddress = HttpContext.Connection.RemoteIpAddress?.ToString();
var result = await _usersService.ManualDeductPointsAsync(userId, input, operatorId, operatorName, ipAddress);
return Success(result, "手动扣除积分成功");
}
catch (BusinessException ex)
{
_logger.LogWarning(ex, "手动扣除积分业务异常: {Message}", ex.Message);
return BaseResponse.Fail(ex.Message);
}
catch (Exception ex)
{
_logger.LogError(ex, "手动扣除积分系统异常,UserId: {UserId}", userId);
return BaseResponse.Fail("手动扣除积分失败,请稍后重试");
}
}
}