feat(marketing): add full reduction campaign api module
All checks were successful
Build and Deploy TenantApi + SkuWorker / build-and-deploy (push) Successful in 1m50s

This commit is contained in:
2026-02-28 15:46:21 +08:00
parent dda3f96d28
commit 5a6da9be0c
27 changed files with 2916 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
namespace TakeoutSaaS.Application.App.Coupons.FullReduction.Dto;
/// <summary>
/// 满减活动规则 DTO。
/// </summary>
public sealed class FullReductionRulesDto
{
/// <summary>
/// 活动类型reduce/gift/second_half
/// </summary>
public string ActivityType { get; init; } = "reduce";
/// <summary>
/// 满减阶梯。
/// </summary>
public IReadOnlyList<FullReductionTierRuleDto> ReduceTiers { get; init; } = [];
/// <summary>
/// 满赠规则。
/// </summary>
public FullReductionGiftRuleDto? GiftRule { get; init; }
/// <summary>
/// 第二份半价规则。
/// </summary>
public FullReductionSecondHalfRuleDto? SecondHalfRule { get; init; }
/// <summary>
/// 适用渠道。
/// </summary>
public IReadOnlyList<string> Channels { get; init; } = [];
/// <summary>
/// 门店范围模式all/stores
/// </summary>
public string StoreScopeMode { get; init; } = "all";
/// <summary>
/// 门店范围 ID。
/// </summary>
public IReadOnlyList<long> StoreIds { get; init; } = [];
/// <summary>
/// 选品基准门店 ID。
/// </summary>
public long ScopeStoreId { get; init; }
/// <summary>
/// 是否可叠加优惠券。
/// </summary>
public bool StackWithCoupon { get; init; }
/// <summary>
/// 活动说明。
/// </summary>
public string? Description { get; init; }
/// <summary>
/// 统计指标。
/// </summary>
public FullReductionMetricsDto Metrics { get; init; } = new();
}