using TakeoutSaaS.Domain.Coupons.Entities;
namespace TakeoutSaaS.Domain.Coupons.Repositories;
///
/// 新客有礼仓储契约。
///
public interface INewCustomerGiftRepository
{
///
/// 查询门店配置。
///
Task FindSettingByStoreIdAsync(
long tenantId,
long storeId,
CancellationToken cancellationToken = default);
///
/// 新增门店配置。
///
Task AddSettingAsync(NewCustomerGiftSetting entity, CancellationToken cancellationToken = default);
///
/// 更新门店配置。
///
Task UpdateSettingAsync(NewCustomerGiftSetting entity, CancellationToken cancellationToken = default);
///
/// 查询门店全部券规则。
///
Task> GetCouponRulesByStoreIdAsync(
long tenantId,
long storeId,
CancellationToken cancellationToken = default);
///
/// 替换门店券规则集合。
///
Task ReplaceCouponRulesAsync(
long tenantId,
long storeId,
IReadOnlyCollection entities,
CancellationToken cancellationToken = default);
///
/// 分页查询邀请记录。
///
Task<(IReadOnlyList Items, int TotalCount)> GetInviteRecordsAsync(
long tenantId,
long storeId,
int page,
int pageSize,
CancellationToken cancellationToken = default);
///
/// 新增邀请记录。
///
Task AddInviteRecordAsync(NewCustomerInviteRecord entity, CancellationToken cancellationToken = default);
///
/// 按业务键查询成长记录。
///
Task FindGrowthRecordByCustomerKeyAsync(
long tenantId,
long storeId,
string customerKey,
CancellationToken cancellationToken = default);
///
/// 新增成长记录。
///
Task AddGrowthRecordAsync(NewCustomerGrowthRecord entity, CancellationToken cancellationToken = default);
///
/// 更新成长记录。
///
Task UpdateGrowthRecordAsync(NewCustomerGrowthRecord entity, CancellationToken cancellationToken = default);
///
/// 统计时间范围内注册新客数。
///
Task CountRegisteredCustomersAsync(
long tenantId,
long storeId,
DateTime startAt,
DateTime endAt,
CancellationToken cancellationToken = default);
///
/// 统计时间范围内礼包已领取数。
///
Task CountGiftClaimedCustomersAsync(
long tenantId,
long storeId,
DateTime startAt,
DateTime endAt,
CancellationToken cancellationToken = default);
///
/// 统计时间范围内首单完成数。
///
Task CountFirstOrderedCustomersAsync(
long tenantId,
long storeId,
DateTime startAt,
DateTime endAt,
CancellationToken cancellationToken = default);
///
/// 持久化变更。
///
Task SaveChangesAsync(CancellationToken cancellationToken = default);
}