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 JournalController : WeChatBaseController { private readonly IUserJournalService _userJournalService; private readonly ILogger _logger; public JournalController(IUserJournalService userJournalService, ILogger logger) { _userJournalService = userJournalService; _logger = logger; } /// /// 用户扫码绑定期刊 /// /// 绑定输入(JournalId、JournalInstanceId 从扫码内容解析,Type 默认 Subscribe) /// 绑定结果 [HttpPost("bind")] public async Task> BindAsync([FromBody] BindJournalInput input) { try { var userId = GetCurrentWxUserId(); if (userId == null) { return BaseResponse.Fail(ResultCode.DENY, "未获取到用户信息"); } var result = await _userJournalService.BindJournalAsync(userId.Value, input); return Success(result, "绑定期刊成功"); } 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("绑定期刊失败,请稍后重试"); } } /// /// 获取当前用户的期刊绑定列表 /// /// 查询条件(期刊Id、实例Id、关联类型) /// 分页结果 [HttpPost("list")] public async Task>> GetListAsync([FromBody] UserJournalQueryInput input) { try { var userId = GetCurrentWxUserId(); if (userId == null) { return BaseResponse>.Fail(ResultCode.DENY, "未获取到用户信息"); } var result = await _userJournalService.GetUserJournalsAsync(userId.Value, input); 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("查询期刊绑定列表失败,请稍后重试"); } } }