package com.red.circle.wallet.infra.database.rds.service.bean;

import com.red.circle.common.business.dto.cmd.PageUserIdCmd;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.mybatis.service.BaseService;
import com.red.circle.wallet.infra.database.rds.entity.bean.BeanBalance;
import java.math.BigDecimal;

/**
 * <p>
 * 用户豆子余额 服务类.
 * </p>
 *
 * @author pengshigang
 * @since 2021-10-14
 */
public interface BeanBalanceService extends BaseService<BeanBalance> {


  /**
   * 累计余额.
   *
   * @param sysOrigin 归属系统
   * @param userId    用户id
   * @param quantity  数量
   * @return 是否操作成功
   */
  boolean incr(String sysOrigin, Long userId, BigDecimal quantity);

  /**
   * 类型消费累计.
   *
   * @param sysOrigin 归属系统
   * @param userId    用户id
   * @param quantity  数量
   * @return 是否操作成功
   */
  boolean decr(String sysOrigin, Long userId, BigDecimal quantity);

  /**
   * 获取糖果余额.
   *
   * @param userId 用户id
   * @return 余额
   */
  BigDecimal getBalance(Long userId);

  /**
   * 余额是否充足.
   *
   * @param userId       用户id
   * @param consumeCandy 消费糖果
   * @return true/false
   */
  boolean isBalanceSufficient(Long userId, BigDecimal consumeCandy);

  /**
   * 分页查询余额
   */
  PageResult<BeanBalance> pageBeanBalance(PageUserIdCmd cmd);
}
