roboticsexpert/balance-manager

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

v1.0.4 2023-01-05 11:36 UTC

This package is not auto-updated.

Last update: 2024-09-26 20:09:32 UTC


README

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

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

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

安装

composer require roboticsexpert/balance-manager

安装composer包后,如果您使用自动发现服务提供者,则一切正常,但如果您阻止了它,只需在config/app.phpproviders部分添加以下行:

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',
    ]
];

您可以使用两种策略使用此项目:外观或依赖注入!

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

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

外观

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

use Roboticsexpert\BalanceManager\BalanceManagerFacade as BalanceManager;


BalanceManager::getAllBalancesByUserId(1)

依赖注入

您可以从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)
);