azibom/balance-manager

轻松为您的用户添加余额(信用)

v2 2022-02-26 17:10 UTC

This package is auto-updated.

Last update: 2024-09-04 18:00:02 UTC


README

在许多项目中,您可能需要为您的用户实现信用(余额)概念,这可能会让您偏离主要业务逻辑。

使用此包,您可以轻松地为您的用户创建余额,无需担心 竞争条件双重花费

该项目主要针对交换系统设计,但您也可以在任何项目中使用它。

安装

composer require roboticsexpert/balance-manager

安装composer包后,如果您使用自动发现服务提供者,则一切正常,但如果您阻止了它,请将此行添加到 config/app.php 文件中的 providers 部分

Roboticsexpert\BalanceManager\BalanceManagerServiceProvider::class

之后,您应该运行

php artisan migrate

然后

php artisan vendor:publish --provider="Roboticsexpert\BalanceManager\BalanceManagerServiceProvider"

它将在您的配置文件中创建 balance.php 文件。

使用方法

首先,您应该决定您希望在系统中使用的货币,并为每种货币考虑一个密钥,然后在 balance.php 配置文件中添加这些密钥

return [

    // add symbols of your currencies
    // symbols must be lower than 16 char

    'currencies'=>[
        'BTC',
        'TMN',
        'DOGE',
    ]
];

您可以使用两种策略使用此项目,外观(Facade)或依赖注入(Dependency Injection)

我建议您使用依赖注入以利用IDE自动补全功能,但请根据您的喜好使用它!

之后,您可以通过以下方法获取 BalanceManager

外观(Facade)

您可以通过这种方式获取 BalanceManager 服务

use Roboticsexpert\BalanceManager\BalanceManagerFacade as BalanceManager;


BalanceManager::getAllBalancesByUserId(1)

依赖注入(Dependency Injection)

您可以通过 app() 获取 BalanceManager 服务,如下所示

use Roboticsexpert\BalanceManager\Services\BalanceManager;

$balanceManager=app(BalanceManager::class); 

$balanceManager->getAllBalancesByUserId(1);

或从 Laravel 自动依赖注入中获取

use Roboticsexpert\BalanceManager\Services\BalanceManager;
class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function index(BalanceManager $balanceManager){
        dd($balanceManager->getAllBalancesByUserId(1));
    }
}

方法

获取用户的所有余额

它将返回一个包含 Balance 模型的数组

$balances= $balanceManager->getAllBalancesByUserId("USER_ID");
dd($balances);

更改用户的余额

$balanceChangeResult= $balanceManager->changeBalanceByUserIdAndCurrency(
        int $userId, //user id
        string $currency, // like USDT, TMN
        string $reason, // a unique string for each action
        IBalanceHistoryRelated $model, // a model that is author of change balance
        Decimal $valueChange, // value you want to add or sub from user balance
        Decimal $lockedValueChange // in general usage it should be new \Decimal\Decimal(0)
);