controller refactoring part 9

This commit is contained in:
Peter Papp
2021-07-20 13:13:33 +02:00
parent 0633131a73
commit 8b250e94cb
10 changed files with 185 additions and 137 deletions
@@ -490,7 +490,7 @@
this.$isSomethingWrong() this.$isSomethingWrong()
}) })
axios.get('/api/user/payments') axios.get('/api/user/payment-cards')
.then(response => { .then(response => {
this.defaultPaymentMethod = response.data.default this.defaultPaymentMethod = response.data.default
+1 -1
View File
@@ -151,7 +151,7 @@
}) })
}, },
fetchPaymentMethods() { fetchPaymentMethods() {
axios.get('/api/user/payments') axios.get('/api/user/payment-cards')
.then(response => { .then(response => {
if (response.status == 204) { if (response.status == 204) {
+9 -8
View File
@@ -3,7 +3,11 @@
use App\Users\Controllers\AuthController; use App\Users\Controllers\AuthController;
use App\Users\Controllers\AccountController; use App\Users\Controllers\AccountController;
use Domain\Payments\Controllers\PaymentMethodsController; use Domain\Payments\Controllers\PaymentMethodsController;
use Domain\Subscriptions\Controllers\GetSetupIntentController;
use Domain\Subscriptions\Controllers\SubscriptionCancelController;
use Domain\Subscriptions\Controllers\SubscriptionController; use Domain\Subscriptions\Controllers\SubscriptionController;
use Domain\Subscriptions\Controllers\SubscriptionResumeController;
use Domain\Subscriptions\Controllers\SubscriptionUpgradeController;
Route::post('/check', [AuthController::class, 'check_account']); Route::post('/check', [AuthController::class, 'check_account']);
@@ -24,16 +28,13 @@ Route::group(['middleware' => ['auth:sanctum']], function () {
Route::get('/', [AccountController::class, 'user']); Route::get('/', [AccountController::class, 'user']);
// Payment cards // Payment cards
Route::delete('/payment-cards/{id}', [PaymentMethodsController::class, 'delete']); Route::apiResource('/payment-cards', PaymentMethodsController::class);
Route::patch('/payment-cards/{id}', [PaymentMethodsController::class, 'update']);
Route::post('/payment-cards', [PaymentMethodsController::class, 'store']);
Route::get('/payments', [PaymentMethodsController::class, 'index']);
// Subscription // Subscription
Route::group(['prefix' => 'subscription'], function () { Route::group(['prefix' => 'subscription'], function () {
Route::get('/setup-intent', [SubscriptionController::class, 'setup_intent']); Route::get('/setup-intent', GetSetupIntentController::class);
Route::post('/upgrade', [SubscriptionController::class, 'upgrade']); Route::post('/upgrade', SubscriptionUpgradeController::class);
Route::post('/cancel', [SubscriptionController::class, 'cancel']); Route::post('/cancel', SubscriptionCancelController::class);
Route::post('/resume', [SubscriptionController::class, 'resume']); Route::post('/resume', SubscriptionResumeController::class);
}); });
}); });
+8 -5
View File
@@ -8,14 +8,17 @@ use Domain\Subscriptions\Controllers\StripeWebhookController;
use Domain\SetupWizard\Controllers\CreateAdminAccountController; use Domain\SetupWizard\Controllers\CreateAdminAccountController;
use Domain\Localization\Controllers\CurrentLocalizationController; use Domain\Localization\Controllers\CurrentLocalizationController;
Route::post('/stripe/webhook', [StripeWebhookController::class, 'handleWebhook']);
// Setup Wizard
Route::post('/admin-setup', CreateAdminAccountController::class); Route::post('/admin-setup', CreateAdminAccountController::class);
Route::get('/translations/{lang}', CurrentLocalizationController::class); // Subscription Services
Route::post('/stripe/webhook', [StripeWebhookController::class, 'handleWebhook']);
// Get user invoice from stripe service
Route::get('/invoice/{customer}/{token}', [InvoiceController::class, 'show'])->middleware(['auth:sanctum']); Route::get('/invoice/{customer}/{token}', [InvoiceController::class, 'show'])->middleware(['auth:sanctum']);
// Translations
Route::get('/translations/{lang}', CurrentLocalizationController::class);
// Get og site for web crawlers // Get og site for web crawlers
if (Crawler::isCrawler()) { if (Crawler::isCrawler()) {
Route::get('/share/{shared}', OGSiteController::class); Route::get('/share/{shared}', OGSiteController::class);
@@ -23,6 +26,6 @@ if (Crawler::isCrawler()) {
Route::get('/share/{shared}', SharePublicIndexController::class); Route::get('/share/{shared}', SharePublicIndexController::class);
} }
// Show index.blade // Index
Route::get('/{any?}', IndexController::class) Route::get('/{any?}', IndexController::class)
->where('any', '.*'); ->where('any', '.*');
@@ -3,10 +3,10 @@ namespace Domain\Payments\Controllers;
use Auth; use Auth;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Laravel\Cashier\PaymentMethod; use Laravel\Cashier\PaymentMethod;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Support\Demo\Actions\DemoService;
use Domain\Subscriptions\Services\StripeService; use Domain\Subscriptions\Services\StripeService;
use Domain\Payments\Resources\PaymentCardResource; use Domain\Payments\Resources\PaymentCardResource;
use Domain\Payments\Resources\PaymentCardCollection; use Domain\Payments\Resources\PaymentCardCollection;
@@ -17,16 +17,12 @@ class PaymentMethodsController extends Controller
{ {
public function __construct( public function __construct(
private StripeService $stripe, private StripeService $stripe,
private DemoService $demo, ) {}
) {
}
/** /**
* Get user payment methods grouped by default and others * Get user payment methods grouped by default and others
*
* @return array
*/ */
public function index() public function index(): array
{ {
$user = Auth::user(); $user = Auth::user();
@@ -80,12 +76,8 @@ class PaymentMethodsController extends Controller
/** /**
* Update default payment method * 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(); $user = Auth::user();
@@ -100,8 +92,8 @@ class PaymentMethodsController extends Controller
// Clear cached payment methods // Clear cached payment methods
cache_forget_many([ cache_forget_many([
'payment-methods-user-' . $user->id, "payment-methods-user-{$user->id}",
'default-payment-methods-user-' . $user->id, "default-payment-methods-user-{$user->id}",
]); ]);
return response('Done', 204); return response('Done', 204);
@@ -109,17 +101,14 @@ class PaymentMethodsController extends Controller
/** /**
* Register new payment method for user * 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 // Get user
$user = Auth::user(); $user = Auth::user();
// Check if is demo // Check if is demo
if (is_demo($user->id)) { if (is_demo_account($user->email)) {
return response('Done', 201); return response('Done', 201);
} }
@@ -131,14 +120,13 @@ class PaymentMethodsController extends Controller
/** /**
* Delete user payment method * Delete user payment method
*
*/ */
public function delete($id) public function delete($id): Response
{ {
$user = Auth::user(); $user = Auth::user();
// Check if is demo // 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 // Get payment method
$paymentMethod = $user->findPaymentMethod($id); $paymentMethod = $user->findPaymentMethod($id);
@@ -151,8 +139,8 @@ class PaymentMethodsController extends Controller
// Clear cached payment methods // Clear cached payment methods
cache_forget_many([ cache_forget_many([
'payment-methods-user-' . $user->id, "payment-methods-user-{$user->id}",
'default-payment-methods-user-' . $user->id, "default-payment-methods-user-{$user->id}",
]); ]);
return response('Done!', 204); return response('Done!', 204);
@@ -0,0 +1,27 @@
<?php
namespace Domain\Subscriptions\Controllers;
use App\Http\Controllers\Controller;
use Auth;
use Domain\Subscriptions\Services\StripeService;
use Illuminate\Http\Response;
/**
* Generate setup intent
*/
class GetSetupIntentController extends Controller
{
public function __construct(
public StripeService $stripe,
) {}
public function setup_intent(): Response
{
return response(
$this->stripe->getSetupIntent(Auth::user()), 201
);
}
}
@@ -0,0 +1,34 @@
<?php
namespace Domain\Subscriptions\Controllers;
use App\Http\Controllers\Controller;
use Auth;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Cache;
class SubscriptionCancelController extends Controller
{
/**
* Cancel Subscription
*/
public function __invoke(): Response
{
$user = Auth::user();
// Check if is demo
if (is_demo_account($user->email)) {
return response('Done!', 204);
}
// Cancel subscription
$user->subscription('main')->cancel();
// Forget user subscription
Cache::forget("subscription-user-{$user->id}");
return response('Done!', 204);
}
}
@@ -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 * 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);
}
} }
@@ -0,0 +1,33 @@
<?php
namespace Domain\Subscriptions\Controllers;
use App\Http\Controllers\Controller;
use Auth;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Cache;
class SubscriptionResumeController extends Controller
{
/**
* Resume Subscription
*/
public function __invoke(): Response
{
$user = Auth::user();
// Check if is demo
if (is_demo_account($user->email)) {
return response('Done!', 204);
}
// Resume subscription
$user->subscription('main')->resume();
// Forget user subscription
Cache::forget("subscription-user-{$user->id}");
return response('Done!', 204);
}
}
@@ -0,0 +1,60 @@
<?php
namespace Domain\Subscriptions\Controllers;
use App\Http\Controllers\Controller;
use Auth;
use Domain\Subscriptions\Requests\StoreUpgradeAccountRequest;
use Domain\Subscriptions\Services\StripeService;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Cache;
/**
* Upgrade account to subscription
*/
class SubscriptionUpgradeController extends Controller
{
public function __construct(
public StripeService $stripe,
) {}
public function __invoke(StoreUpgradeAccountRequest $request): Response
{
$user = Auth::user();
// Check if is demo
if (is_demo_account($user->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);
}
}