%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/geotechnics/api/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
Current File : /var/www/html/geotechnics/api/app/Http/Controllers/Api/v1/SubscriptionsController.php

<?php

namespace App\Http\Controllers\Api\v1;

use App\Exports\SubscriptionsExport;
use App\Http\Controllers\Api\ApiController;
use App\Http\Requests\Api\v1\NewsLetter\SubscriptionRequest;
use App\Models\Subscription;
use App\Transformers\SubscriptionTransformer;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;

class SubscriptionsController extends ApiController
{
    public function index(Request $request)
    {
        /** @var LengthAwarePaginator $result */
        $result = Subscription::query()
                              ->where('is_subscribed', true);

        if ($search = $request->get('search')) {
            $result = $result->where('email', 'like', "%$search%");
        }

        $result = $result->paginate($request->get('perPage'));
        return $this->withPaginated($result, new SubscriptionTransformer());
    }

    public function subscribe(SubscriptionRequest $request)
    {
        /** @var Subscription $subscription */
        $subscription = Subscription::query()
                                    ->updateOrCreate([
                                        'email' => $request->get('email'),
                                    ], [
                                        'email'         => $request->get('email'),
                                        'is_subscribed' => true,
                                    ]);

        return $this->item($subscription, new SubscriptionTransformer());
    }


    public function unsubscribe(SubscriptionRequest $request)
    {
        /** @var Subscription $subscription */
        $subscription = Subscription::query()
                                    ->updateOrCreate([
                                        'email' => $request->get('email'),
                                    ], [
                                        'email'         => $request->get('email'),
                                        'is_subscribed' => false,
                                    ]);

        return $this->item($subscription, new SubscriptionTransformer());
    }

    public function exportExcel(Request $request)
    {
        $result = Subscription::query()
                              ->where('is_subscribed', true);
        if ($search = $request->get('search')) {
            $result = $result->where('email', 'like', "%$search%");
        }
        return (new SubscriptionsExport($result))->download('newsletter.xlsx');
    }

}

Zerion Mini Shell 1.0