%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/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\Http\Requests\Api\v1\Categories\UpdateCategoryRequest;
use App\Models\Category;
use App\Transformers\CategoryTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Spatie\Fractal\Fractal;

class CategoriesController extends ApiController
{
    /**
     * @param Request $request
     * @return Fractal
     */
    public function index(Request $request)
    {
        /** @var LengthAwarePaginator $result */
        $result = Category::query();

        if ($name = $request->get('code')) {
            $result = $result->where('code', 'like', "$name%");
        }
        if ($description = $request->get('description')) {
            $result = $result->where('description', 'like', "$description%");
        }
        if ($request->get('is_enabled')) {
            $result = $result->where('is_enabled', true);
        }
        if ($request->get('is_disabled')) {
            $result = $result->where('is_enabled', false);
        }
        $result = $result->paginate($request->get('perPage'));
        return $this->withPaginated($result, new CategoryTransformer());
    }

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

    public function store(CreateCategoryRequest $request)
    {
        /** @var Category $category */
        $category = Category::query()
                            ->create($request->only(['code', 'description']));
        return $this->item($category, new CategoryTransformer());
    }

    /**
     * @param UpdateCategoryRequest $request
     * @param $id
     * @return JsonResponse
     */
    public function update(UpdateCategoryRequest $request, $id)
    {
        /** @var Category $category */
        $category = Category::query()
                            ->findOrFail($id);
        $category->update($request->only(['code', 'description']));
        return $this->item($category, new CategoryTransformer());
    }

    public function destroy(Category $category)
    {
        if (!$category->canDelete()) {
            return $this->wrongArguments([
                'message' => 'Not possible to delete this category due to services associated!',
            ]);
        }
        try {
            $category->delete();
        } catch (\Exception $e) {
            return $this->wrongArguments([
                'message' => 'Not possible to delete this category for the moment!',
            ]);
        }
        return [];
    }

    public function enable(Category $category)
    {
        $category->enable();
        return $this->item($category, new CategoryTransformer());
    }

    public function disable(Category $category)
    {
        $category->disable();
        return $this->item($category, new CategoryTransformer());
    }

}

Zerion Mini Shell 1.0