minutemailer/laravel-honeypot

为 Laravel 提供灵活的积分系统

v1.0.0 2023-04-14 09:59 UTC

This package is auto-updated.

Last update: 2024-09-30 01:30:24 UTC


README

Honeypot 是一个简单的 Laravel 积分系统。使用 Honeypot,用户可以拥有积分桶,其中可以存入或取出积分。它非常适合创建简单的虚拟货币系统或实施奖励计划。

使用 Honeypot,您可以轻松管理用户的积分并跟踪所有交易。无论是构建电子商务平台还是社交网络,Honeypot 都可以轻松地将积分系统添加到您的 Laravel 应用程序中。

安装

您可以通过 composer 安装此软件包

composer require minutemailer/laravel-honeypot

HoneypotServiceProvider 将由 Laravel 自动发现并注册。

接下来,创建并运行数据库迁移

php artisan honeypot:migration:make
php artisan migrate

最后,将 CanHaveCredits 特性添加到您的 User 模型中

use Minutemailer\Honeypot\Traits\CanHaveCredits;

class User extends Authenticatable
{
    use CanHaveCredits;
}

用法

在 Honeypot 中,积分桶必须有一个名称,但您也可以选择为每个桶设置一个过期日期。如果没有设置过期日期,则桶将无限期地保持活动状态。此外,您还可以为每个桶设置一个有效期。

创建桶

要创建桶,请在 User 模型上使用 addCreditBucket 方法

$user->addCreditBucket('credits', [
    'expires_at' => now()->addYear(), // Optional, defaults to null
    'valid_from' => now()->subYear(), // Optional, defaults to null
    'amount' => 1000 // Optional, defaults to 0
]);

名称对每个用户是唯一的,因此您不能为同一用户创建具有相同名称的两个桶。

存入积分

要将积分存入桶中,您需要通过名称选择桶,然后在该桶上调用 add 方法

$user->getCreditBucket('credits')->add(100);

使用积分

与存入积分相同,但使用 use 方法代替

$user->getCreditBucket('credits')->use(100);

使用积分将增加桶上的 used 列,同时保持 amount 列不变。

默认桶

根据您的应用程序,您可能希望利用默认桶。您可能只有一种类型的积分,但有多种类型的桶。例如,赚取的积分购买的积分。默认桶是具有最短过期日期的桶。这有助于用户首先使用即将过期的积分。

因此,您可以使用此逻辑动态地从用户中提取积分

$creditsToWithdraw = 100;

while ($creditsToWithdraw > 0) {
    $bucket = $user->getDefaultCreditBucket();

    if ($bucket->amount > $creditsToWithdraw) {
        $bucket->use($creditsToWithdraw);
        $creditsToWithdraw = 0;
    } else {
        $creditsToWithdraw -= $bucket->amount;
        $bucket->use($bucket->amount);
    }
}