diff --git a/app/Http/Controllers/StripeController.php b/app/Http/Controllers/StripeController.php index b446736..a4ca675 100644 --- a/app/Http/Controllers/StripeController.php +++ b/app/Http/Controllers/StripeController.php @@ -112,27 +112,75 @@ class StripeController extends Controller } } - public function validatePayment(Request $request) + public function validatePayment(Request $request) { $clientSessionId = $request->query('client_session_id'); - $payment = Payment::where('client_session_id', $clientSessionId) - ->where('status', 'succeeded') - ->first(); + if (!$clientSessionId) { + return response()->json(['error' => 'Client session ID is required'], 400); + } - if ($payment) { - // Si la vérification réussit, retournez le nombre de tirages. + $payment = Payment::where('client_session_id', $clientSessionId)->first(); + + if (!$payment) { + return response()->json([ + 'success' => false, + 'message' => 'Payment not found.', + ], 404); + } + + // If payment is already succeeded in our database + if ($payment->status === 'succeeded') { return response()->json([ 'success' => true, 'drawCount' => $payment->draw_count, + 'cached' => true, ]); } - // Si la vérification échoue, retournez une erreur. + // If payment is pending, check with Stripe directly to handle race condition + if ($payment->status === 'pending') { + try { + Stripe::setApiKey(env('STRIPE_SECRET_KEY')); + $session = Session::retrieve($clientSessionId); + + // Check if payment is completed on Stripe side + if ($session->payment_status === 'paid' && $session->status === 'complete') { + // Update our payment record and mark as succeeded + $payment->update(['status' => 'succeeded']); + + return response()->json([ + 'success' => true, + 'drawCount' => $payment->draw_count, + 'updated' => true, + ]); + } + + // Payment not completed yet, return pending status + return response()->json([ + 'success' => false, + 'message' => 'Payment is still being processed.', + 'status' => 'pending', + ], 202); + + } catch (\Exception $e) { + \Log::error('Stripe validation failed: ' . $e->getMessage(), [ + 'client_session_id' => $clientSessionId, + 'payment_id' => $payment->id + ]); + return response()->json([ + 'success' => false, + 'message' => 'Payment validation error.', + ], 500); + } + } + + // Payment failed or has other status return response()->json([ 'success' => false, - 'message' => 'Paiement non validé.', - ], 404); + 'message' => 'Payment failed or cancelled.', + 'status' => $payment->status, + ], 402); } public function getCards(Request $request) diff --git a/app/Repositories/CardRepository.php b/app/Repositories/CardRepository.php index 3dd2bea..01c4895 100644 --- a/app/Repositories/CardRepository.php +++ b/app/Repositories/CardRepository.php @@ -73,7 +73,9 @@ class CardRepository implements CardRepositoryInterface 'name' => $card->name, 'image_url' => $card->image_url, 'orientation' => $isReversed ? 'reversed' : 'upright', - 'description' => $isReversed ? $card->description_reversed : $card->description_upright, + 'description' => $card->description, + 'description_reversed' => $card->description_reversed, + 'description_upright' => $card->description_upright, 'symbolism' => $card->symbolism, 'created_at' => now(), ]; diff --git a/public/build.zip b/public/build.zip index 7600d0d..150779b 100644 Binary files a/public/build.zip and b/public/build.zip differ diff --git a/resources/js/components/landing/OfferSection.vue b/resources/js/components/landing/OfferSection.vue index c5b332f..d4e594e 100644 --- a/resources/js/components/landing/OfferSection.vue +++ b/resources/js/components/landing/OfferSection.vue @@ -91,10 +91,13 @@ diff --git a/resources/js/pages/cards/FreeCardResult.vue b/resources/js/pages/cards/FreeCardResult.vue index bbba6f8..db6b57c 100644 --- a/resources/js/pages/cards/FreeCardResult.vue +++ b/resources/js/pages/cards/FreeCardResult.vue @@ -14,14 +14,25 @@ -
-
Erreur
-

{{ error }}

+
+
Error
+

{{ error }}

- -
-

Aucune carte n'a été trouvée pour votre session.

+ +
+
🔮
+

No Reading Found

+

Your previous reading could not be retrieved. Would you like to do a new free reading?

+
@@ -36,9 +47,6 @@

{{ card.name }}

-
-
-
@@ -51,11 +59,6 @@ :alt="card.name" class="absolute inset-0 h-full w-full rounded-2xl object-cover" /> -
-

{{ card.name }}

-
@@ -65,24 +68,14 @@
-
-

- {{ card.orientation === 'reversed' ? 'Signification Inversée' : 'Signification Droite' }} -

-
+
+

Upright Meaning

+
-
-

- {{ card.orientation === 'reversed' ? 'Signification Droite' : 'Signification Inversée' }} -

-
+
+

Reversed Meaning

+
@@ -194,6 +187,7 @@ diff --git a/resources/js/pages/cards/cardSelection.vue b/resources/js/pages/cards/cardSelection.vue index 1f431ed..d3db5e0 100644 --- a/resources/js/pages/cards/cardSelection.vue +++ b/resources/js/pages/cards/cardSelection.vue @@ -1,8 +1,9 @@