it_register_user_when_metered_billing_is_active

This commit is contained in:
Čarodej
2022-01-10 10:20:13 +01:00
parent 0d8f1b64a7
commit 26aa8b46df
7 changed files with 192 additions and 48 deletions
@@ -0,0 +1,34 @@
<?php
namespace App\Users\Actions;
use App\Users\Models\User;
use VueFileManager\Subscription\Domain\Plans\Models\Plan;
class AutoSubscribeForMeteredBillingAction
{
public function __invoke(User $user)
{
// Get metered billing plan
$plan = Plan::where('status', 'active')
->where('type', 'metered')
->first();
// TODO: add bonus
// Create user balance
$user->balance()->create([
'amount' => 0,
'currency' => $plan->currency,
]);
// Create user subscription
$user->subscription()->create([
'plan_id' => $plan->id,
'name' => $plan->name,
'status' => 'active',
'renews_at' => now()->addDays(config('subscription.metered_billing.settlement_period')),
'type' => 'pre-paid',
]);
}
}
+19 -12
View File
@@ -1,16 +1,20 @@
<?php
namespace App\Users\Actions;
use App\Users\Models\User;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\Registered;
use Illuminate\Contracts\Auth\StatefulGuard;
use VueFileManager\Subscription\Domain\Plans\Models\Plan;
class CreateNewUserAction extends Controller
{
public function __construct(
protected StatefulGuard $guard
) {
protected StatefulGuard $guard,
protected AutoSubscribeForMeteredBillingAction $autoSubscribeForMeteredBilling,
)
{
}
/**
@@ -19,11 +23,11 @@ class CreateNewUserAction extends Controller
public function __invoke($data)
{
$settings = get_settings([
'registration', 'user_verification',
'registration', 'user_verification', 'subscription_type',
]);
// Check if account registration is enabled
if (! intval($settings['registration'])) {
if (!intval($settings['registration'])) {
abort(401);
}
@@ -34,22 +38,25 @@ class CreateNewUserAction extends Controller
'email' => $data->email,
]);
$user
->settings()
->create([
'name' => $data->name,
'avatar' => $data->avatar,
]);
$user->settings()->create([
'name' => $data->name,
'avatar' => $data->avatar,
]);
// Subscribe user for metered billing
if ($settings['subscription_type'] === 'metered') {
($this->autoSubscribeForMeteredBilling)($user);
}
// Mark as verified if verification is disabled
if (! $data->password || ! intval($settings['user_verification'])) {
if (!$data->password || !intval($settings['user_verification'])) {
$user->markEmailAsVerified();
}
event(new Registered($user));
// Log in if verification is disabled
if (! $data->password || ! intval($settings['user_verification'])) {
if (!$data->password || !intval($settings['user_verification'])) {
$this->guard->login($user);
}
}