using HoneyBox.Admin.Business.Attributes; using HoneyBox.Admin.Business.Models; using HoneyBox.Admin.Business.Models.Coupon; using HoneyBox.Admin.Business.Services.Interfaces; using Microsoft.AspNetCore.Mvc; namespace HoneyBox.Admin.Business.Controllers; /// /// 优惠券管理控制器 /// [Route("api/admin/business/[controller]")] [Route("api/admin/business/coupons")] // 兼容复数形式路由 public class CouponController : BusinessControllerBase { private readonly ICouponService _couponService; public CouponController(ICouponService couponService) { _couponService = couponService; } /// /// 获取优惠券模板列表(简化版,用于下拉选择) /// /// 状态筛选:1-启用 /// 优惠券模板列表 [HttpGet("templates")] [BusinessPermission("coupon:list")] public async Task GetCouponTemplates([FromQuery] int? status) { try { var request = new CouponListRequest { Page = 1, PageSize = 100 // 获取所有启用的优惠券 }; var result = await _couponService.GetCouponsAsync(request); // 如果指定了 status,过滤结果 var list = status.HasValue ? result.List.Where(c => c.Status == status.Value).ToList() : result.List; return Ok(list); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 获取优惠券列表 /// /// 查询请求 /// 分页优惠券列表 [HttpGet] [BusinessPermission("coupon:list")] public async Task GetCoupons([FromQuery] CouponListRequest request) { try { var result = await _couponService.GetCouponsAsync(request); return Ok(result); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 获取优惠券详情 /// /// 优惠券ID /// 优惠券详情 [HttpGet("{id}")] [BusinessPermission("coupon:list")] public async Task GetCouponById(int id) { try { var result = await _couponService.GetCouponByIdAsync(id); if (result == null) { return NotFoundError("优惠券不存在"); } return Ok(result); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 创建优惠券 /// /// 创建请求 /// 新优惠券ID [HttpPost] [BusinessPermission("coupon:add")] public async Task CreateCoupon([FromBody] CouponCreateRequest request) { try { var couponId = await _couponService.CreateCouponAsync(request); return Ok(new { id = couponId }, "创建成功"); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 更新优惠券 /// /// 优惠券ID /// 更新请求 /// 操作结果 [HttpPut("{id}")] [BusinessPermission("coupon:edit")] public async Task UpdateCoupon(int id, [FromBody] CouponUpdateRequest request) { try { var result = await _couponService.UpdateCouponAsync(id, request); return result ? Ok("更新成功") : Error(BusinessErrorCodes.InternalError, "更新失败"); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 删除优惠券 /// /// 优惠券ID /// 操作结果 [HttpDelete("{id}")] [BusinessPermission("coupon:delete")] public async Task DeleteCoupon(int id) { try { var result = await _couponService.DeleteCouponAsync(id); return result ? Ok("删除成功") : Error(BusinessErrorCodes.InternalError, "删除失败"); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } } /// /// 获取优惠券领取记录列表 /// /// 查询请求 /// 分页领取记录列表 [HttpGet("receive")] [BusinessPermission("coupon:list")] public async Task GetCouponReceives([FromQuery] CouponReceiveListRequest request) { try { var result = await _couponService.GetCouponReceivesAsync(request); return Ok(result); } catch (BusinessException ex) { return Error(ex.Code, ex.Message); } catch (Exception ex) { // 捕获数据库表不存在等异常 if (ex.Message.Contains("Invalid object name") || ex.InnerException?.Message.Contains("Invalid object name") == true) { return Error(BusinessErrorCodes.InternalError, "优惠券领取记录表尚未创建,请先执行数据库迁移脚本"); } throw; } } }