using Microsoft.AspNetCore.Mvc; using QYZH.InteractiveMagazine.IService; using QYZH.InteractiveMagazine.Models.Common; using QYZH.InteractiveMagazine.Models.Dto; namespace QYZH.InteractiveMagazine.WebApi.Controllers.WeChat; /// /// 小程序勋章控制器 /// public class MedalController(IMedalService medalService, ILogger logger) : WeChatBaseController { /// /// 获取所有勋章列表(含当前用户拥有状态) /// [HttpGet("all")] public async Task>> GetAllMedals() { try { var userId = GetCurrentUserId(); if (userId == null) { return BaseResponse>.Fail(ResultCode.DENY, "未获取到用户信息"); } var result = await medalService.GetAllMedalsAsync(userId.Value); 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("my")] public async Task>> GetUserMedals() { try { var userId = GetCurrentUserId(); if (userId == null) { return BaseResponse>.Fail(ResultCode.DENY, "未获取到用户信息"); } var result = await medalService.GetUserMedalsAsync(userId.Value); 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("activate")] public async Task> ActivateMedal([FromBody] WxMedalActivateInput input) { try { var userId = GetCurrentUserId(); if (userId == null) { return BaseResponse.Fail(ResultCode.DENY, "未获取到用户信息"); } await medalService.ActivateMedalAsync(userId.Value, input); return Success(null!, "勋章激活成功"); } catch (BusinessException ex) { logger.LogWarning(ex, "激活勋章业务异常: {Message}", ex.Message); return BaseResponse.Fail(ex.Message); } catch (Exception ex) { logger.LogError(ex, "激活勋章系统异常,参数:{Input}", input); return BaseResponse.Fail("激活勋章失败,请稍后重试"); } } }