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("手动扣除积分失败,请稍后重试"); } } }