%PDF- %PDF-
Direktori : /home/forge/api-takeaseat.eco-n-tech.co.uk/app/Http/Controllers/Account/ |
Current File : //home/forge/api-takeaseat.eco-n-tech.co.uk/app/Http/Controllers/Account/SubscriptionController.php |
<?php namespace App\Http\Controllers\Account; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Http\Resources\SubscriptionResource; use App\Mail\NewSubscription; use App\Mail\CancelledSubscription; use Illuminate\Support\Facades\Mail; use App\Services\Stripe\PaymentMethodService as StripeService; class SubscriptionController extends Controller { /** * Get the users subscription * * @param Request $request * @return SubscriptionResource $subscription */ public function index(Request $request) { $subscription = auth()->user()->subscription(config('subscription.product_id')); if ($subscription !== null) { return new SubscriptionResource($subscription); } return response()->json('User has no subscription', 422); } /** * Create a new subscription for the user * * @param Request $request * @return SubscriptionResource $newSubscription */ public function create(Request $request) { $user = auth()->user(); $paymentMethod = $request->get('payment_method'); $discountCode = $request->get('discount_code'); try { $user->addPaymentMethod($paymentMethod); $user->updateDefaultPaymentMethod($paymentMethod); $user->updateDefaultPaymentMethodFromStripe(); } catch (Exception $e) { return response()->json($e, 422); } if ($user->hasDefaultPaymentMethod()) { // Check the discount code exists and is valid // nb: Chaining seems to break with newSubscription // so have to do two different calls if (!empty($discountCode)) { if (StripeService::couponValid($discountCode) == false) { return response()->json('The discount code you have entered is invalid, please try again.', 400); } $newSubscription = $user->newSubscription( config('subscription.product_id'), config('subscription.plan_id') ) ->withCoupon($discountCode) ->add(); } else { $newSubscription = $user->newSubscription( config('subscription.product_id'), config('subscription.plan_id') )->add(); } Mail::to($user)->send(new NewSubscription($user)); return new SubscriptionResource($newSubscription); } return response()->json('User has no payment method', 400); } /** * Resume an existing subscription * * @param Request $request * @return SubscriptionResource $subscription */ public function resume(Request $request) { $user = auth()->user(); if ($user->subscribed(config('subscription.product_id'))) { $subscription = $user->subscription(config('subscription.product_id'))->resume(); return new SubscriptionResource($subscription); } return response()->json('User not subscribed', 422); } /** * Cancel an existing subscription * * @param Request $request * @return SubscriptionResource $subscription */ public function cancel() { $user = auth()->user(); if ($user->subscribed(config('subscription.product_id'))) { $subscription = $user->subscription(config('subscription.product_id'))->cancel(); Mail::to($user)->send(new CancelledSubscription($user)); return new SubscriptionResource($subscription); } return response()->json('User not subscribed', 422); } }