From 079996521230a7cf456a6f4055bec45dbae90e6c Mon Sep 17 00:00:00 2001 From: kusowl Date: Fri, 20 Mar 2026 19:03:33 +0530 Subject: [PATCH] wip: stripe implementation - add model, dto --- backend/.env.example | 3 ++ ...oneDTO.php => OrderCreatedResponseDTO.php} | 2 +- backend/app/Data/StripeLineItemDTO.php | 35 +++++++++++++++++++ backend/app/Data/StripeSessionDataDTO.php | 32 +++++++++++++++++ backend/app/Enums/StripeCurrency.php | 9 +++++ backend/app/Enums/StripePaymentMode.php | 8 +++++ backend/app/Models/Order.php | 5 +++ backend/app/Models/StripeSession.php | 16 +++++++++ backend/config/services.php | 4 +++ ...20_104918_create_stripe_sessions_table.php | 32 +++++++++++++++++ 10 files changed, 145 insertions(+), 1 deletion(-) rename backend/app/Data/{OrderResponeDTO.php => OrderCreatedResponseDTO.php} (86%) create mode 100644 backend/app/Data/StripeLineItemDTO.php create mode 100644 backend/app/Data/StripeSessionDataDTO.php create mode 100644 backend/app/Enums/StripeCurrency.php create mode 100644 backend/app/Enums/StripePaymentMode.php create mode 100644 backend/app/Models/StripeSession.php create mode 100644 backend/database/migrations/2026_03_20_104918_create_stripe_sessions_table.php diff --git a/backend/.env.example b/backend/.env.example index 2e68f92..aeda409 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -65,3 +65,6 @@ AWS_USE_PATH_STYLE_ENDPOINT=false VITE_APP_NAME="${APP_NAME}" FRONTEND_URL=http://localhost:4200 SANCTUM_STATEFUL_DOMAINS=localhost:4200 + +STRIPE_SECRET_KEY=sk_test_51TCvFrJG0RVtUg4VTqHZC2szosam9Mf0Nq0Sh71tdIKdld5DnOUhUl4VvFBZVRWPM9G5hLPNVmH8YNXqm2R6fR5U00fsEsLb1d +STRIPE_WEBHOOK_KEY= diff --git a/backend/app/Data/OrderResponeDTO.php b/backend/app/Data/OrderCreatedResponseDTO.php similarity index 86% rename from backend/app/Data/OrderResponeDTO.php rename to backend/app/Data/OrderCreatedResponseDTO.php index e04b4a0..b9cb646 100644 --- a/backend/app/Data/OrderResponeDTO.php +++ b/backend/app/Data/OrderCreatedResponseDTO.php @@ -5,7 +5,7 @@ use App\Contracts\OutputDataTransferObject; use Illuminate\Database\Eloquent\Model; -final readonly class OrderResponeDTO implements OutputDataTransferObject +final readonly class OrderCreatedResponseDTO implements OutputDataTransferObject { public function __construct( // TODO: Define your properties here diff --git a/backend/app/Data/StripeLineItemDTO.php b/backend/app/Data/StripeLineItemDTO.php new file mode 100644 index 0000000..112dbc9 --- /dev/null +++ b/backend/app/Data/StripeLineItemDTO.php @@ -0,0 +1,35 @@ + + */ + public function toArray(): array + { + return [ + 'price_data' => [ + 'currency' => $this->currency->value, + 'unit_amount' => $this->price, + 'product_data' => [ + 'name' => $this->productName, + 'description' => $this->productDescription, + ], + ], + 'quantity' => $this->quantity, + ]; + } +} diff --git a/backend/app/Data/StripeSessionDataDTO.php b/backend/app/Data/StripeSessionDataDTO.php new file mode 100644 index 0000000..8d21ffd --- /dev/null +++ b/backend/app/Data/StripeSessionDataDTO.php @@ -0,0 +1,32 @@ + + */ + public function toArray(): array + { + return [ + 'line_items' => array_map(fn (StripeLineItemDTO $dto) => $dto->toArray(), $this->lineItems), + 'mode' => $this->mode->value, + 'success_url' => $this->successUrl, + 'cancel_url' => $this->cancelUrl, + ]; + } +} diff --git a/backend/app/Enums/StripeCurrency.php b/backend/app/Enums/StripeCurrency.php new file mode 100644 index 0000000..90a69af --- /dev/null +++ b/backend/app/Enums/StripeCurrency.php @@ -0,0 +1,9 @@ +hasOne(Cart::class); } + + public function stripeSession(): HasOne + { + return $this->hasOne(StripeSession::class); + } } diff --git a/backend/app/Models/StripeSession.php b/backend/app/Models/StripeSession.php new file mode 100644 index 0000000..bc54e88 --- /dev/null +++ b/backend/app/Models/StripeSession.php @@ -0,0 +1,16 @@ +hasOne(Order::class); + } +} diff --git a/backend/config/services.php b/backend/config/services.php index 6a90eb8..e0418d7 100644 --- a/backend/config/services.php +++ b/backend/config/services.php @@ -35,4 +35,8 @@ ], ], + 'stripe' => [ + 'secret' => env('STRIPE_SECRET_KEY'), + 'webhook' => env('STRIPE_WEBHOOK_KEY'), + ], ]; diff --git a/backend/database/migrations/2026_03_20_104918_create_stripe_sessions_table.php b/backend/database/migrations/2026_03_20_104918_create_stripe_sessions_table.php new file mode 100644 index 0000000..7633f10 --- /dev/null +++ b/backend/database/migrations/2026_03_20_104918_create_stripe_sessions_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('session_id'); + $table->foreignIdFor(Order::class) + ->constrained() + ->cascadeOnDelete(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('stripe_sessions'); + } +};