feat: Added Enum for payment states

This commit is contained in:
IceToast 2023-05-28 02:34:59 +02:00 committed by IceToast
parent 48e5cae9a1
commit 2161464ee3
5 changed files with 28 additions and 27 deletions

View file

@ -0,0 +1,12 @@
<?php
namespace App\Enums;
// Payment status are open, processing, paid and canceled
enum PaymentStatus: String
{
case OPEN = "open";
case PROCESSING = "processing";
case PAID = "paid";
case CANCELED = "canceled";
}

View file

@ -3,6 +3,7 @@
namespace App\Extensions\PaymentGateways\Mollie; namespace App\Extensions\PaymentGateways\Mollie;
use App\Classes\AbstractExtension; use App\Classes\AbstractExtension;
use App\Enums\PaymentStatus;
use App\Events\PaymentEvent; use App\Events\PaymentEvent;
use App\Events\UserUpdateCreditsEvent; use App\Events\UserUpdateCreditsEvent;
use App\Models\PartnerDiscount; use App\Models\PartnerDiscount;
@ -74,12 +75,8 @@ class MollieExtension extends AbstractExtension
static function success(Request $request): void static function success(Request $request): void
{ {
$payment = Payment::findOrFail($request->input('payment')); $payment = Payment::findOrFail($request->input('payment'));
$payment->status = 'pending'; $payment->status = PaymentStatus::PROCESSING;
$couponCode = $request->input('couponCode'); $payment->save();
if ($couponCode) {
event(new CouponUsedEvent($couponCode));
}
Redirect::route('home')->with('success', 'Your payment is being processed')->send(); Redirect::route('home')->with('success', 'Your payment is being processed')->send();
return; return;
@ -100,16 +97,15 @@ class MollieExtension extends AbstractExtension
return response()->json(['success' => false]); return response()->json(['success' => false]);
} }
$payment = Payment::findOrFail($response->json()['metadata']['payment_id']);
$payment->status->update([
'status' => $response->json()['status'],
]);
$payment = Payment::findOrFail($response->json()['metadata']['payment_id']);
$shopProduct = ShopProduct::findOrFail($payment->shop_item_product_id); $shopProduct = ShopProduct::findOrFail($payment->shop_item_product_id);
event(new PaymentEvent($payment, $payment, $shopProduct)); event(new PaymentEvent($payment, $payment, $shopProduct));
if ($response->json()['status'] == 'paid') { if ($response->json()['status'] == 'paid') {
$user = User::findOrFail($payment->user_id); $user = User::findOrFail($payment->user_id);
$payment->status = PaymentStatus::PAID;
$payment->save();
event(new UserUpdateCreditsEvent($user)); event(new UserUpdateCreditsEvent($user));
} }
} catch (Exception $ex) { } catch (Exception $ex) {

View file

@ -7,6 +7,7 @@ use App\Events\PaymentEvent;
use App\Events\UserUpdateCreditsEvent; use App\Events\UserUpdateCreditsEvent;
use App\Extensions\PaymentGateways\PayPal\PayPalSettings; use App\Extensions\PaymentGateways\PayPal\PayPalSettings;
use App\Classes\PaymentExtension; use App\Classes\PaymentExtension;
use App\Enums\PaymentStatus;
use App\Models\PartnerDiscount; use App\Models\PartnerDiscount;
use App\Models\Payment; use App\Models\Payment;
use App\Models\ShopProduct; use App\Models\ShopProduct;
@ -104,7 +105,6 @@ class PayPalExtension extends PaymentExtension
$payment = Payment::findOrFail($laravelRequest->payment); $payment = Payment::findOrFail($laravelRequest->payment);
$shopProduct = ShopProduct::findOrFail($payment->shop_item_product_id); $shopProduct = ShopProduct::findOrFail($payment->shop_item_product_id);
$couponCode = $laravelRequest->input('couponCode');
$request = new OrdersCaptureRequest($laravelRequest->input('token')); $request = new OrdersCaptureRequest($laravelRequest->input('token'));
$request->prefer('return=representation'); $request->prefer('return=representation');
@ -115,13 +115,10 @@ class PayPalExtension extends PaymentExtension
if ($response->statusCode == 201 || $response->statusCode == 200) { if ($response->statusCode == 201 || $response->statusCode == 200) {
//update payment //update payment
$payment->update([ $payment->update([
'status' => 'paid', 'status' => PaymentStatus::PAID,
'payment_id' => $response->result->id, 'payment_id' => $response->result->id,
]); ]);
if ($couponCode) {
event(new CouponUsedEvent($couponCode));
}
event(new UserUpdateCreditsEvent($user)); event(new UserUpdateCreditsEvent($user));
event(new PaymentEvent($user, $payment, $shopProduct)); event(new PaymentEvent($user, $payment, $shopProduct));
@ -134,7 +131,7 @@ class PayPalExtension extends PaymentExtension
dd($response); dd($response);
} else { } else {
$payment->update([ $payment->update([
'status' => 'cancelled', 'status' => PaymentStatus::CANCELED,
'payment_id' => $response->result->id, 'payment_id' => $response->result->id,
]); ]);
abort(500); abort(500);
@ -146,7 +143,7 @@ class PayPalExtension extends PaymentExtension
dd($ex->getMessage()); dd($ex->getMessage());
} else { } else {
$payment->update([ $payment->update([
'status' => 'cancelled', 'status' => PaymentStatus::CANCELED,
'payment_id' => $response->result->id, 'payment_id' => $response->result->id,
]); ]);
abort(422); abort(422);

View file

@ -3,6 +3,7 @@
namespace App\Extensions\PaymentGateways\Stripe; namespace App\Extensions\PaymentGateways\Stripe;
use App\Classes\AbstractExtension; use App\Classes\AbstractExtension;
use App\Enums\PaymentStatus;
use App\Events\PaymentEvent; use App\Events\PaymentEvent;
use App\Events\CouponUsedEvent; use App\Events\CouponUsedEvent;
use App\Events\UserUpdateCreditsEvent; use App\Events\UserUpdateCreditsEvent;
@ -93,7 +94,6 @@ class StripeExtension extends AbstractExtension
$user = User::findOrFail($user->id); $user = User::findOrFail($user->id);
$payment = Payment::findOrFail($request->input('payment')); $payment = Payment::findOrFail($request->input('payment'));
$shopProduct = ShopProduct::findOrFail($payment->shop_item_product_id); $shopProduct = ShopProduct::findOrFail($payment->shop_item_product_id);
$couponCode = $request->input('couponCode');
Redirect::route('home')->with('success', 'Please wait for success')->send(); Redirect::route('home')->with('success', 'Please wait for success')->send();
@ -112,16 +112,11 @@ class StripeExtension extends AbstractExtension
//update payment //update payment
$payment->update([ $payment->update([
'payment_id' => $paymentSession->payment_intent, 'payment_id' => $paymentSession->payment_intent,
'status' => 'paid', 'status' => PaymentStatus::PAID,
]); ]);
if ($couponCode) {
event(new CouponUsedEvent(new Coupon, $couponCode));
}
//payment notification //payment notification
$user->notify(new ConfirmPaymentNotification($payment)); $user->notify(new ConfirmPaymentNotification($payment));
event(new UserUpdateCreditsEvent($user)); event(new UserUpdateCreditsEvent($user));
event(new PaymentEvent($user, $payment, $shopProduct)); event(new PaymentEvent($user, $payment, $shopProduct));
@ -133,7 +128,7 @@ class StripeExtension extends AbstractExtension
//update payment //update payment
$payment->update([ $payment->update([
'payment_id' => $paymentSession->payment_intent, 'payment_id' => $paymentSession->payment_intent,
'status' => 'processing', 'status' => PaymentStatus::PROCESSING,
]); ]);
event(new PaymentEvent($user, $payment, $shopProduct)); event(new PaymentEvent($user, $payment, $shopProduct));
@ -174,7 +169,7 @@ class StripeExtension extends AbstractExtension
//update payment db entry status //update payment db entry status
$payment->update([ $payment->update([
'payment_id' => $payment->payment_id ?? $paymentIntent->id, 'payment_id' => $payment->payment_id ?? $paymentIntent->id,
'status' => 'paid' 'status' => PaymentStatus::PAID,
]); ]);
//payment notification //payment notification

View file

@ -2,6 +2,7 @@
namespace App\Listeners; namespace App\Listeners;
use App\Enums\PaymentStatus;
use App\Events\PaymentEvent; use App\Events\PaymentEvent;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
@ -48,7 +49,7 @@ class UserPayment
$shopProduct = $event->shopProduct; $shopProduct = $event->shopProduct;
// only update user if payment is paid // only update user if payment is paid
if ($event->payment->status != "paid") { if ($event->payment->status != PaymentStatus::PAID) {
return; return;
} }