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

import com.red.circle.framework.mybatis.service.BaseService;
import com.red.circle.wallet.infra.database.rds.entity.WalletGoldBalance;

/**
 * 用户金币钱包 服务类.
 *
 * @author pengliang on 2023/6/30
 */
public interface WalletGoldBalanceService extends BaseService<WalletGoldBalance> {

  /**
   * 记录是否存在.
   */
  boolean exists(Long userId);

  /**
   * 初始化钱包，不存在创建.
   */
  void init(String sysOrigin, Long userId, Long income, Long expenditure);

  /**
   * 获取用户余额(注意可能出现负数).
   */
  Long getBalance(Long userId);

  Long getBalanceTotal(Long userId);

  /**
   * 增加收入.
   */
  void incrIncome(Long userId, Long amount);

  /**
   * 增加支出.
   */
  void incrExpenditure(Long userId, Long amount);

  /**
   * 增加支出.
   */
  boolean incrExpenditureCas(Long userId, Long amount, Long amountCas);

  /**
   * 清理用户余额.
   */
  boolean clear(Long userId);

}
