using Microsoft.AspNetCore.Mvc; using QYZH.InteractiveMagazine.IService; using QYZH.InteractiveMagazine.Models.Common; using QYZH.InteractiveMagazine.Models.Dto; using QYZH.InteractiveMagazine.Models.Dto.CheckIn; namespace QYZH.InteractiveMagazine.WeChatApi.Controllers; /// /// 签到控制器 /// public class CheckInController : WeChatBaseController { private readonly ICheckInService _checkInService; private readonly ILogger _logger; public CheckInController(ICheckInService checkInService, ILogger logger) { _checkInService = checkInService; _logger = logger; } /// /// 用户签到 /// /// 签到结果(含奖励详情和余额) [HttpPost("checkIn")] public async Task> CheckInAsync() { try { var userId = GetCurrentUserId(); if (userId == 0) { return BaseResponse.Fail(ResultCode.DENY, "未获取到用户信息"); } var result = await _checkInService.CheckInAsync(userId); return Success(result, "签到成功"); } catch (BusinessException ex) { _logger.LogWarning(ex, "签到业务异常: {Message}", ex.Message); return BaseResponse.Fail(ex.Message); } catch (Exception ex) { _logger.LogError(ex, "签到系统异常"); return BaseResponse.Fail("签到失败,请稍后重试"); } } /// /// 获取签到信息(今日状态、连续天数、最近记录) /// /// 签到信息 [HttpGet("info")] public async Task> GetCheckInInfoAsync() { try { var userId = GetCurrentUserId(); if (userId == 0) { return BaseResponse.Fail(ResultCode.DENY, "未获取到用户信息"); } var result = await _checkInService.GetCheckInInfoAsync(userId); return Success(result); } catch (BusinessException ex) { _logger.LogWarning(ex, "获取签到信息业务异常: {Message}", ex.Message); return BaseResponse.Fail(ex.Message); } catch (Exception ex) { _logger.LogError(ex, "获取签到信息系统异常"); return BaseResponse.Fail("获取签到信息失败,请稍后重试"); } } /// /// 补签(消耗补签卡,补签历史漏签日期) /// /// 补签输入(目标日期) /// 补签结果(含奖励详情和余额) [HttpPost("makeUp")] public async Task> MakeUpCheckInAsync([FromBody] MakeUpCheckInInput input) { try { var userId = GetCurrentUserId(); if (userId == 0) { return BaseResponse.Fail(ResultCode.DENY, "未获取到用户信息"); } var result = await _checkInService.MakeUpCheckInAsync(userId, input.TargetDate); return Success(result, "补签成功"); } catch (BusinessException ex) { _logger.LogWarning(ex, "补签业务异常: {Message}", ex.Message); return BaseResponse.Fail(ex.Message); } catch (Exception ex) { _logger.LogError(ex, "补签系统异常"); return BaseResponse.Fail("补签失败,请稍后重试"); } } /// /// 获取可补签的日期列表(历史漏签日期) /// /// 往前查看天数(默认30天) /// 漏签日期列表 [HttpGet("missedDates")] public async Task>> GetMissedDatesAsync([FromQuery] int days = 30) { try { var userId = GetCurrentUserId(); if (userId == 0) { return BaseResponse>.Fail(ResultCode.DENY, "未获取到用户信息"); } var result = await _checkInService.GetMissedDatesAsync(userId, days); return Success(result); } catch (BusinessException ex) { _logger.LogWarning(ex, "获取可补签日期业务异常: {Message}", ex.Message); return BaseResponse>.Fail(ex.Message); } catch (Exception ex) { _logger.LogError(ex, "获取可补签日期系统异常"); return BaseResponse>.Fail("获取可补签日期失败,请稍后重试"); } } }