feat: ✨ Added new events to extract payment logic
This commit is contained in:
parent
59f8e8c696
commit
0257bf4e85
|
@ -3,6 +3,8 @@
|
||||||
namespace App\Events;
|
namespace App\Events;
|
||||||
|
|
||||||
use App\Models\Payment;
|
use App\Models\Payment;
|
||||||
|
use App\Models\ShopProduct;
|
||||||
|
use App\Models\User;
|
||||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||||
use Illuminate\Foundation\Events\Dispatchable;
|
use Illuminate\Foundation\Events\Dispatchable;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
@ -11,19 +13,19 @@ class PaymentEvent
|
||||||
{
|
{
|
||||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||||
|
|
||||||
/**
|
public User $user;
|
||||||
* @var User
|
|
||||||
*/
|
|
||||||
public Payment $payment;
|
public Payment $payment;
|
||||||
|
public ShopProduct $shopProduct;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new event instance.
|
* Create a new event instance.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function __construct(Payment $payment)
|
public function __construct(User $user, Payment $payment, ShopProduct $shopProduct)
|
||||||
{
|
{
|
||||||
|
$this->user = $user;
|
||||||
$this->payment = $payment;
|
$this->payment = $payment;
|
||||||
|
$this->shopProduct = $shopProduct;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ use App\Traits\Invoiceable;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
|
||||||
class PaymentListener
|
class CreateInvoice implements ShouldQueue
|
||||||
{
|
{
|
||||||
|
|
||||||
use Invoiceable;
|
use Invoiceable;
|
||||||
|
@ -23,7 +23,7 @@ class PaymentListener
|
||||||
if (config('SETTINGS::INVOICE:ENABLED') == 'true') {
|
if (config('SETTINGS::INVOICE:ENABLED') == 'true') {
|
||||||
// get user from payment which does hold the user_id
|
// get user from payment which does hold the user_id
|
||||||
$user = $event->payment->user;
|
$user = $event->payment->user;
|
||||||
|
|
||||||
// create invoice using the trait
|
// create invoice using the trait
|
||||||
$this->createInvoice($user, $event->payment);
|
$this->createInvoice($user, $event->payment);
|
||||||
}
|
}
|
78
app/Listeners/UserPayment.php
Normal file
78
app/Listeners/UserPayment.php
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Listeners;
|
||||||
|
|
||||||
|
use App\Events\PaymentEvent;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use App\Models\PartnerDiscount;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
|
||||||
|
class UserPayment
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle the event.
|
||||||
|
*
|
||||||
|
* @param \App\Events\PaymentEvent $event
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function handle(PaymentEvent $event)
|
||||||
|
{
|
||||||
|
$user = $event->user;
|
||||||
|
$shopProduct = $event->shopProduct;
|
||||||
|
|
||||||
|
|
||||||
|
//update server limit
|
||||||
|
if (config('SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE') !== 0) {
|
||||||
|
if ($user->server_limit < config('SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE')) {
|
||||||
|
$user->update(['server_limit' => config('SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE')]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//update User with bought item
|
||||||
|
if ($shopProduct->type == "Credits") {
|
||||||
|
$user->increment('credits', $shopProduct->quantity);
|
||||||
|
} elseif ($shopProduct->type == "Server slots") {
|
||||||
|
$user->increment('server_limit', $shopProduct->quantity);
|
||||||
|
}
|
||||||
|
//give referral commission always
|
||||||
|
if ((config("SETTINGS::REFERRAL:MODE") == "commission" || config("SETTINGS::REFERRAL:MODE") == "both") && $shopProduct->type == "Credits" && config("SETTINGS::REFERRAL::ALWAYS_GIVE_COMMISSION") == "true") {
|
||||||
|
if ($ref_user = DB::table("user_referrals")->where('registered_user_id', '=', $user->id)->first()) {
|
||||||
|
$ref_user = User::findOrFail($ref_user->referral_id);
|
||||||
|
$increment = number_format($shopProduct->quantity * (PartnerDiscount::getCommission($ref_user->id)) / 100, 0, "", "");
|
||||||
|
$ref_user->increment('credits', $increment);
|
||||||
|
|
||||||
|
//LOGS REFERRALS IN THE ACTIVITY LOG
|
||||||
|
activity()
|
||||||
|
->performedOn($user)
|
||||||
|
->causedBy($ref_user)
|
||||||
|
->log('gained ' . $increment . ' ' . config("SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME") . ' for commission-referral of ' . $user->name . ' (ID:' . $user->id . ')');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//update role give Referral-reward
|
||||||
|
if ($user->role == 'member') {
|
||||||
|
$user->update(['role' => 'client']);
|
||||||
|
|
||||||
|
//give referral commission only on first purchase
|
||||||
|
if ((config("SETTINGS::REFERRAL:MODE") == "commission" || config("SETTINGS::REFERRAL:MODE") == "both") && $shopProduct->type == "Credits" && config("SETTINGS::REFERRAL::ALWAYS_GIVE_COMMISSION") == "false") {
|
||||||
|
if ($ref_user = DB::table("user_referrals")->where('registered_user_id', '=', $user->id)->first()) {
|
||||||
|
$ref_user = User::findOrFail($ref_user->referral_id);
|
||||||
|
$increment = number_format($shopProduct->quantity * (PartnerDiscount::getCommission($ref_user->id)) / 100, 0, "", "");
|
||||||
|
$ref_user->increment('credits', $increment);
|
||||||
|
|
||||||
|
//LOGS REFERRALS IN THE ACTIVITY LOG
|
||||||
|
activity()
|
||||||
|
->performedOn($user)
|
||||||
|
->causedBy($ref_user)
|
||||||
|
->log('gained ' . $increment . ' ' . config("SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME") . ' for commission-referral of ' . $user->name . ' (ID:' . $user->id . ')');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LOGS PAYMENT IN THE ACTIVITY LOG
|
||||||
|
activity()
|
||||||
|
->performedOn($user)
|
||||||
|
->causedBy($user)
|
||||||
|
->log('bought ' . $shopProduct->quantity . ' ' . $shopProduct->type . ' for ' . $shopProduct->price . $shopProduct->currency_code);
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,8 +4,9 @@ namespace App\Providers;
|
||||||
|
|
||||||
use App\Events\PaymentEvent;
|
use App\Events\PaymentEvent;
|
||||||
use App\Events\UserUpdateCreditsEvent;
|
use App\Events\UserUpdateCreditsEvent;
|
||||||
use App\Listeners\PaymentListener;
|
use App\Listeners\CreateInvoice;
|
||||||
use App\Listeners\UnsuspendServers;
|
use App\Listeners\UnsuspendServers;
|
||||||
|
use App\Listeners\UserPayment;
|
||||||
use App\Listeners\Verified;
|
use App\Listeners\Verified;
|
||||||
use Illuminate\Auth\Events\Registered;
|
use Illuminate\Auth\Events\Registered;
|
||||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||||
|
@ -28,7 +29,8 @@ class EventServiceProvider extends ServiceProvider
|
||||||
UnsuspendServers::class,
|
UnsuspendServers::class,
|
||||||
],
|
],
|
||||||
PaymentEvent::class => [
|
PaymentEvent::class => [
|
||||||
PaymentListener::class,
|
CreateInvoice::class,
|
||||||
|
UserPayment::class,
|
||||||
],
|
],
|
||||||
SocialiteWasCalled::class => [
|
SocialiteWasCalled::class => [
|
||||||
// ... other providers
|
// ... other providers
|
||||||
|
|
Loading…
Reference in a new issue