package com.seamew.lottery.domain.strategy.service.draw;

import com.seamew.lottery.domain.strategy.model.req.DrawReq;
import com.seamew.lottery.domain.strategy.model.res.DrawResult;
import com.seamew.lottery.domain.strategy.model.vo.AwardDeductStockVO;

/**
 * @Author: seamew
 * @Title: IDrawExec
 * @CreateTime: 2023年02月13日 20:39:00
 * @Description: 抽奖执行接口
 * @Version: 1.0
 */
public interface IDrawExec {
    /**
     * 抽奖方法
     *
     * @param req 抽奖参数；用户ID、策略ID
     * @return 中奖结果
     */
    DrawResult doDrawExec(DrawReq req);

    /**
     * 更新奖品库存
     *
     * @param awardDeductStockVO 奖品削减库存记录
     */
    void updateAwardStock(AwardDeductStockVO awardDeductStockVO);

    /**
     * 释放redis锁
     *
     * @param tokenKey 分布式 KEY 用于清理
     */
    void recoverAwardCacheStockByRedis(String tokenKey);
}
