azibom / balance-manager
轻松为您的用户添加余额(信用)
v2
2022-02-26 17:10 UTC
Requires
- ext-decimal: *
- roboticsexpert/laravel-decimal: ^1.0
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) );