roboticsexpert / balance-manager
轻松为您的用户添加余额(信用)
v1.0.4
2023-01-05 11:36 UTC
Requires
- ext-decimal: *
- roboticsexpert/laravel-decimal: ^1.0
This package is not auto-updated.
Last update: 2024-09-26 20:09:32 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', ] ];
您可以使用两种策略使用此项目:外观或依赖注入!
我建议您使用依赖注入以利用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) );