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 }}
+
-
-
-
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 @@
@@ -51,11 +59,6 @@
:alt="card.name"
class="absolute inset-0 h-full w-full rounded-2xl object-cover"
/>
-
@@ -65,24 +68,14 @@
-
-
- {{ card.orientation === 'reversed' ? 'Signification Inversée' : 'Signification Droite' }}
-
-
+
-
-
- {{ card.orientation === 'reversed' ? 'Signification Droite' : 'Signification Inversée' }}
-
-
+
@@ -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 @@
@@ -156,14 +170,15 @@ const clearHover = () => {
Reveal your inner power
Free
-
Single‑card Reading General Interpretation Quick Tips
+
Single‑card Reading Interpretation