package com.jeesharp.business.modules.member.service;

import com.jeesharp.business.modules.member.entity.MemberPointsGrantRecord;

import java.time.LocalDate;

/**
 * 积分发放幂等记录领域服务。
 *
 * @author jeesharp
 * @since 2026-06-23
 */
public interface MemberPointsGrantRecordService {

    /**
     * 是否已存在有效发放记录（未冲正）。
     */
    MemberPointsGrantRecord findActive(String memberId, String sceneCode, String bizId);

    /**
     * 统计某场景今日发放次数。
     */
    long countTodayByMemberAndScene(String memberId, String sceneCode, LocalDate day);

    /**
     * 统计某场景累计发放次数。
     */
    long countTotalByMemberAndScene(String memberId, String sceneCode);

    /**
     * 保存发放记录。
     *
     * @return true 插入成功；false 唯一键冲突（并发幂等）
     */
    boolean trySaveRecord(MemberPointsGrantRecord record);

    /**
     * 保存发放记录（冲突时抛出异常）。
     */
    void saveRecord(MemberPointsGrantRecord record);

    /**
     * 回写积分流水 ID。
     */
    void updatePointsLogId(String id, String pointsLogId);

    /**
     * 标记冲正。
     */
    void markRevoked(String id);
}
