%PDF- %PDF-
Direktori : /var/www/html/shaban/duassis/api/app/Http/Controllers/Api/v1/ |
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(), ]); } } }