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;
}
}
}