%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/diaspora/api_internal/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
Current File : /var/www/html/diaspora/api_internal/app/Http/Controllers/Api/v1/CategoriesController.php

<?php

namespace App\Http\Controllers\Api\v1;

use App\Http\Controllers\Api\ApiController;
use App\Http\Requests\Api\v1\Categories\CreateCategoryRequest;
use App\Jobs\SubscribeAllDevicesToCategoryJob;
use App\Models\Category;
use App\Transformers\CategoryTransformer;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;

class CategoriesController extends ApiController
{
    /**
     * User $user.
     */
    protected $user;

    /**
     * PostsController constructor.
     */
    public function __construct()
    {
        $this->user = auth()
            ->guard('api')
            ->user();
    }

    /**
     * @param Request $request
     * @return CategoriesController
     */
    public function index(Request $request)
    {
        /** @var LengthAwarePaginator $result */
        $result = $this->filterCategories($request)
                       ->paginate($request->get('perPage'));
        return $this->withPaginated($result, new CategoryTransformer());
    }

    private function filterCategories(Request $request)
    {
        $result = Category::query();

        if ($name = $request->get('name')) {
            $result = $result->whereHas('translations', function ($q) use ($name) {
                $q->where('name', 'like', "$name%");
                $q->where('locale', app()->getLocale());
            });
        }

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

        return $result;
    }

    /**
     * @param $id
     * @return CategoriesController
     */
    public function show($id)
    {
        $category = Category::query()
                            ->findOrFail($id);
        return $this->item($category, new CategoryTransformer());
    }

    public function store(CreateCategoryRequest $request)
    {
        /** @var Category $category */
        $category = Category::query()
                            ->create($request->only(['slug', 'name']));
        activity()
            ->causedBy($this->user)
            ->performedOn($category)
            ->log('created');

        $this->dispatch(new SubscribeAllDevicesToCategoryJob($category));

        return $this->item($category, new CategoryTransformer());
    }

    public function update(CreateCategoryRequest $request, $id)
    {
        $category = Category::query()
                            ->findOrFail($id);
        $category->update($request->only(['name']));
        activity()
            ->causedBy($this->user)
            ->performedOn($category)
            ->log('updated');
        return $this->item($category, new CategoryTransformer());
    }

    public function archive(Category $category)
    {
        $category->archive();
        activity()
            ->causedBy($this->user)
            ->performedOn($category)
            ->log('archived');
        return $this->item($category, new CategoryTransformer());
    }

    public function unArchive(Category $category)
    {
        $category->unArchive();
        activity()
            ->causedBy($this->user)
            ->performedOn($category)
            ->log('unArchived');
        return $this->item($category, new CategoryTransformer());
    }

    public function getAvailableCategories()
    {
        return $this->collection(Category::query()
                                         ->get(), new CategoryTransformer());
    }

}

Zerion Mini Shell 1.0