From 8b250e94cbd8ddc190120e0a96254eb6def03fa7 Mon Sep 17 00:00:00 2001 From: Peter Papp Date: Tue, 20 Jul 2021 13:13:33 +0200 Subject: [PATCH] controller refactoring part 9 --- resources/js/views/Upgrade/UpgradeBilling.vue | 2 +- resources/js/views/User/PaymentMethods.vue | 2 +- routes/user.php | 17 ++-- routes/web.php | 13 ++- .../Controllers/PaymentMethodsController.php | 36 +++---- .../Controllers/GetSetupIntentController.php | 27 +++++ .../SubscriptionCancelController.php | 34 +++++++ .../Controllers/SubscriptionController.php | 98 ------------------- .../SubscriptionResumeController.php | 33 +++++++ .../SubscriptionUpgradeController.php | 60 ++++++++++++ 10 files changed, 185 insertions(+), 137 deletions(-) create mode 100644 src/Domain/Subscriptions/Controllers/GetSetupIntentController.php create mode 100644 src/Domain/Subscriptions/Controllers/SubscriptionCancelController.php create mode 100644 src/Domain/Subscriptions/Controllers/SubscriptionResumeController.php create mode 100644 src/Domain/Subscriptions/Controllers/SubscriptionUpgradeController.php diff --git a/resources/js/views/Upgrade/UpgradeBilling.vue b/resources/js/views/Upgrade/UpgradeBilling.vue index d7dde210..b13ca395 100644 --- a/resources/js/views/Upgrade/UpgradeBilling.vue +++ b/resources/js/views/Upgrade/UpgradeBilling.vue @@ -490,7 +490,7 @@ this.$isSomethingWrong() }) - axios.get('/api/user/payments') + axios.get('/api/user/payment-cards') .then(response => { this.defaultPaymentMethod = response.data.default diff --git a/resources/js/views/User/PaymentMethods.vue b/resources/js/views/User/PaymentMethods.vue index ec9a832e..5eaf41c2 100644 --- a/resources/js/views/User/PaymentMethods.vue +++ b/resources/js/views/User/PaymentMethods.vue @@ -151,7 +151,7 @@ }) }, fetchPaymentMethods() { - axios.get('/api/user/payments') + axios.get('/api/user/payment-cards') .then(response => { if (response.status == 204) { diff --git a/routes/user.php b/routes/user.php index 30d333c6..f2ac4172 100644 --- a/routes/user.php +++ b/routes/user.php @@ -3,7 +3,11 @@ use App\Users\Controllers\AuthController; use App\Users\Controllers\AccountController; use Domain\Payments\Controllers\PaymentMethodsController; +use Domain\Subscriptions\Controllers\GetSetupIntentController; +use Domain\Subscriptions\Controllers\SubscriptionCancelController; use Domain\Subscriptions\Controllers\SubscriptionController; +use Domain\Subscriptions\Controllers\SubscriptionResumeController; +use Domain\Subscriptions\Controllers\SubscriptionUpgradeController; Route::post('/check', [AuthController::class, 'check_account']); @@ -24,16 +28,13 @@ Route::group(['middleware' => ['auth:sanctum']], function () { Route::get('/', [AccountController::class, 'user']); // Payment cards - Route::delete('/payment-cards/{id}', [PaymentMethodsController::class, 'delete']); - Route::patch('/payment-cards/{id}', [PaymentMethodsController::class, 'update']); - Route::post('/payment-cards', [PaymentMethodsController::class, 'store']); - Route::get('/payments', [PaymentMethodsController::class, 'index']); + Route::apiResource('/payment-cards', PaymentMethodsController::class); // Subscription Route::group(['prefix' => 'subscription'], function () { - Route::get('/setup-intent', [SubscriptionController::class, 'setup_intent']); - Route::post('/upgrade', [SubscriptionController::class, 'upgrade']); - Route::post('/cancel', [SubscriptionController::class, 'cancel']); - Route::post('/resume', [SubscriptionController::class, 'resume']); + Route::get('/setup-intent', GetSetupIntentController::class); + Route::post('/upgrade', SubscriptionUpgradeController::class); + Route::post('/cancel', SubscriptionCancelController::class); + Route::post('/resume', SubscriptionResumeController::class); }); }); diff --git a/routes/web.php b/routes/web.php index 10dc184b..8d181b27 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,14 +8,17 @@ use Domain\Subscriptions\Controllers\StripeWebhookController; use Domain\SetupWizard\Controllers\CreateAdminAccountController; use Domain\Localization\Controllers\CurrentLocalizationController; -Route::post('/stripe/webhook', [StripeWebhookController::class, 'handleWebhook']); + +// Setup Wizard Route::post('/admin-setup', CreateAdminAccountController::class); -Route::get('/translations/{lang}', CurrentLocalizationController::class); - -// Get user invoice from stripe service +// Subscription Services +Route::post('/stripe/webhook', [StripeWebhookController::class, 'handleWebhook']); Route::get('/invoice/{customer}/{token}', [InvoiceController::class, 'show'])->middleware(['auth:sanctum']); +// Translations +Route::get('/translations/{lang}', CurrentLocalizationController::class); + // Get og site for web crawlers if (Crawler::isCrawler()) { Route::get('/share/{shared}', OGSiteController::class); @@ -23,6 +26,6 @@ if (Crawler::isCrawler()) { Route::get('/share/{shared}', SharePublicIndexController::class); } -// Show index.blade +// Index Route::get('/{any?}', IndexController::class) ->where('any', '.*'); diff --git a/src/Domain/Payments/Controllers/PaymentMethodsController.php b/src/Domain/Payments/Controllers/PaymentMethodsController.php index 58be0bfd..3d8d70b6 100644 --- a/src/Domain/Payments/Controllers/PaymentMethodsController.php +++ b/src/Domain/Payments/Controllers/PaymentMethodsController.php @@ -3,10 +3,10 @@ namespace Domain\Payments\Controllers; use Auth; use Illuminate\Http\Request; +use Illuminate\Http\Response; use Laravel\Cashier\PaymentMethod; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Cache; -use Support\Demo\Actions\DemoService; use Domain\Subscriptions\Services\StripeService; use Domain\Payments\Resources\PaymentCardResource; use Domain\Payments\Resources\PaymentCardCollection; @@ -17,16 +17,12 @@ class PaymentMethodsController extends Controller { public function __construct( private StripeService $stripe, - private DemoService $demo, - ) { - } + ) {} /** * Get user payment methods grouped by default and others - * - * @return array */ - public function index() + public function index(): array { $user = Auth::user(); @@ -80,12 +76,8 @@ class PaymentMethodsController extends Controller /** * Update default payment method - * - * @param Request $request - * @param $id - * @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response */ - public function update($id) + public function update(string $id): Response { $user = Auth::user(); @@ -100,8 +92,8 @@ class PaymentMethodsController extends Controller // Clear cached payment methods cache_forget_many([ - 'payment-methods-user-' . $user->id, - 'default-payment-methods-user-' . $user->id, + "payment-methods-user-{$user->id}", + "default-payment-methods-user-{$user->id}", ]); return response('Done', 204); @@ -109,17 +101,14 @@ class PaymentMethodsController extends Controller /** * Register new payment method for user - * - * @param Request $request - * @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response */ - public function store(RegisterNewPaymentMethodRequest $request) + public function store(RegisterNewPaymentMethodRequest $request): Response { // Get user $user = Auth::user(); // Check if is demo - if (is_demo($user->id)) { + if (is_demo_account($user->email)) { return response('Done', 201); } @@ -131,14 +120,13 @@ class PaymentMethodsController extends Controller /** * Delete user payment method - * */ - public function delete($id) + public function delete($id): Response { $user = Auth::user(); // Check if is demo - abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Done.'); + abort_if(is_demo_account($user->email), 204, 'Done.'); // Get payment method $paymentMethod = $user->findPaymentMethod($id); @@ -151,8 +139,8 @@ class PaymentMethodsController extends Controller // Clear cached payment methods cache_forget_many([ - 'payment-methods-user-' . $user->id, - 'default-payment-methods-user-' . $user->id, + "payment-methods-user-{$user->id}", + "default-payment-methods-user-{$user->id}", ]); return response('Done!', 204); diff --git a/src/Domain/Subscriptions/Controllers/GetSetupIntentController.php b/src/Domain/Subscriptions/Controllers/GetSetupIntentController.php new file mode 100644 index 00000000..e4fa2429 --- /dev/null +++ b/src/Domain/Subscriptions/Controllers/GetSetupIntentController.php @@ -0,0 +1,27 @@ +stripe->getSetupIntent(Auth::user()), 201 + ); + } +} \ No newline at end of file diff --git a/src/Domain/Subscriptions/Controllers/SubscriptionCancelController.php b/src/Domain/Subscriptions/Controllers/SubscriptionCancelController.php new file mode 100644 index 00000000..a3ceb5b9 --- /dev/null +++ b/src/Domain/Subscriptions/Controllers/SubscriptionCancelController.php @@ -0,0 +1,34 @@ +email)) { + return response('Done!', 204); + } + + // Cancel subscription + $user->subscription('main')->cancel(); + + // Forget user subscription + Cache::forget("subscription-user-{$user->id}"); + + return response('Done!', 204); + } +} \ No newline at end of file diff --git a/src/Domain/Subscriptions/Controllers/SubscriptionController.php b/src/Domain/Subscriptions/Controllers/SubscriptionController.php index 225870e1..81e18a97 100644 --- a/src/Domain/Subscriptions/Controllers/SubscriptionController.php +++ b/src/Domain/Subscriptions/Controllers/SubscriptionController.php @@ -22,19 +22,6 @@ class SubscriptionController extends Controller ) { } - /** - * Generate setup intent - * - * @return Application|ResponseFactory|Response|SetupIntent - */ - public function setup_intent() - { - return response( - $this->stripe->getSetupIntent(Auth::user()), - 201 - ); - } - /** * Get user subscription detail * @@ -60,89 +47,4 @@ class SubscriptionController extends Controller ); }); } - - /** - * Upgrade account to subscription - * - * @param StoreUpgradeAccountRequest $request - * @return ResponseFactory|Response - */ - public function upgrade(StoreUpgradeAccountRequest $request) - { - // Get user - $user = Auth::user(); - - // Check if is demo - if (is_demo($user->id)) { - return $this->demo->response_204(); - } - - // Forget user subscription - Cache::forget('subscription-user-' . $user->id); - - // Get requested plan - $plan = $this->stripe->getPlan($request->input('plan.data.id')); - - // Set user billing - $user->setBilling($request->input('billing')); - - // Update stripe customer billing info - $this->stripe->updateCustomerDetails($user); - - // Make subscription - $this->stripe->createOrReplaceSubscription($request, $user); - - // Update user storage limit - $user->settings()->update([ - 'storage_capacity' => $plan['product']['metadata']['capacity'], - ]); - - return response('Done!', 204); - } - - /** - * Cancel Subscription - * - * @return ResponseFactory|Response - */ - public function cancel() - { - $user = User::find(Auth::id()); - - // Check if is demo - if (is_demo($user->id)) { - return $this->demo->response_204(); - } - - // Cancel subscription - $user->subscription('main')->cancel(); - - // Forget user subscription - Cache::forget('subscription-user-' . $user->id); - - return response('Done!', 204); - } - - /** - * Resume Subscription - * - * @return ResponseFactory|Response - */ - public function resume() - { - $user = User::find(Auth::id()); - - // Check if is demo - if (is_demo($user->id)) { - return $this->demo->response_204(); - } - - // Resume subscription - $user->subscription('main')->resume(); - - // Forget user subscription - Cache::forget('subscription-user-' . $user->id); - - return response('Done!', 204); - } } diff --git a/src/Domain/Subscriptions/Controllers/SubscriptionResumeController.php b/src/Domain/Subscriptions/Controllers/SubscriptionResumeController.php new file mode 100644 index 00000000..37acb74d --- /dev/null +++ b/src/Domain/Subscriptions/Controllers/SubscriptionResumeController.php @@ -0,0 +1,33 @@ +email)) { + return response('Done!', 204); + } + + // Resume subscription + $user->subscription('main')->resume(); + + // Forget user subscription + Cache::forget("subscription-user-{$user->id}"); + + return response('Done!', 204); + } +} \ No newline at end of file diff --git a/src/Domain/Subscriptions/Controllers/SubscriptionUpgradeController.php b/src/Domain/Subscriptions/Controllers/SubscriptionUpgradeController.php new file mode 100644 index 00000000..44af3e6d --- /dev/null +++ b/src/Domain/Subscriptions/Controllers/SubscriptionUpgradeController.php @@ -0,0 +1,60 @@ +email)) { + return response('Done!', 204); + } + + // Forget user subscription + Cache::forget("subscription-user-{$user->id}"); + + // Get requested plan + $plan = $this->stripe->getPlan( + $request->input('plan.data.id') + ); + + // Set user billing + $user->setBilling( + $request->input('billing') + ); + + // Update stripe customer billing info + $this->stripe->updateCustomerDetails($user); + + // Make subscription + $this->stripe->createOrReplaceSubscription($request, $user); + + // Update user storage limit + $user + ->settings() + ->update([ + 'storage_capacity' => $plan['product']['metadata']['capacity'], + ]); + + return response('Done!', 204); + } +} \ No newline at end of file