
package com.tmerclub.cloud.api.seckill.feign;

import com.tmerclub.cloud.api.seckill.vo.SeckillApiVO;
import com.tmerclub.cloud.common.order.vo.OrderCountVO;
import com.tmerclub.cloud.common.order.vo.ShopCartOrderMergerVO;
import com.tmerclub.cloud.common.product.vo.SekillActivitySpuVO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

import java.util.List;
import java.util.Map;

/**
 * @author YXF
 * @date 2021/3/29
 */
public interface SeckillFeignClient {

    /**
     * 根据商品id获取秒杀商品信息
     * @param selectedLot 所选批次
     * @param spuIds 商品ids
     * @return 秒杀商品信息
     */
    ServerResponseEntity<List<SekillActivitySpuVO>> seckillSpuListBySpuIds(Integer selectedLot, List<Long> spuIds);

    /**
     * 根据活动d获取秒杀商品信息
     * @param activityId 活动id
     * @return 秒杀商品信息
     */
    ServerResponseEntity<SeckillApiVO> getSeckillInfoById(Long activityId);

    /**
     * 根据商品ids下线所有的秒杀活动
     *
     * @param spuIds    商品ids
     * @param updateSpu 是否修改商品信息
     * @return 返回结果
     */
    ServerResponseEntity<Void> offlineSeckillBySpuIds(List<Long> spuIds, Boolean updateSpu);

    /**
     * 根据店铺id下线所有的秒杀活动
     * @param shopId 店铺id
     * @return 返回结果
     */
    ServerResponseEntity<Void> offlineSeckillByShopId(Long shopId);

    /**
     * 获取缓存中的秒杀订单
     * @param orderId
     * @param userId
     * @return
     */
    ServerResponseEntity<ShopCartOrderMergerVO> getSeckillOrderByRedis(Long orderId, Long userId);

    /**
     * 获取缓存中的秒杀订单
     * @param userId
     * @return
     */
    ServerResponseEntity<Map<Object, Object>> mapSeckillOrderByUserIdAndRedis(Long userId);

    /**
     * 更新秒杀订单状态
     *
     * @param orderId
     * @param userId
     * @param status
     */
    void updateRedisSeckillOrderStatus(Long orderId, Long userId, Integer status);

    /**
     * 获取当前用户秒杀订单中可能存在的数量
     * @param userId
     * @return
     */
    ServerResponseEntity<OrderCountVO> countRedisSeckillOrder(Long userId);

    /**
     * 删除redis中该订单信息
     * @param userId
     * @param orderId
     * @return
     */
    ServerResponseEntity<Void> deleteRedisOrderByUserIdAndOrderId(Long userId, Long orderId);
}
