From fbb4db5e608647a49f9802fd1af09b9a4bfafffd Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 9 Nov 2024 10:52:57 +0330 Subject: [PATCH] create panel for azmayesh type crud --- .../V3/Azmayesh/AzmayeshSampleController.php | 6 +- .../V3/Azmayesh/AzmayeshTypeController.php | 69 +++++++++++++++++++ .../Requests/V3/AzmayeshType/StoreRequest.php | 29 ++++++++ .../V3/AzmayeshType/UpdateRequest.php | 29 ++++++++ routes/v3.php | 4 ++ 5 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 app/Http/Requests/V3/AzmayeshType/StoreRequest.php create mode 100644 app/Http/Requests/V3/AzmayeshType/UpdateRequest.php diff --git a/app/Http/Controllers/V3/Azmayesh/AzmayeshSampleController.php b/app/Http/Controllers/V3/Azmayesh/AzmayeshSampleController.php index 2dee40af..9aa4303d 100644 --- a/app/Http/Controllers/V3/Azmayesh/AzmayeshSampleController.php +++ b/app/Http/Controllers/V3/Azmayesh/AzmayeshSampleController.php @@ -59,7 +59,7 @@ class AzmayeshSampleController extends Controller /** * Display the specified resource. */ - public function show(AzmayeshSample $azmayeshSample) + public function show(AzmayeshSample $azmayeshSample): JsonResponse { return $this->successResponse($azmayeshSample); } @@ -67,7 +67,7 @@ class AzmayeshSampleController extends Controller /** * Update the specified resource in storage. */ - public function update(UpdateRequest $request, AzmayeshSample $azmayeshSample) + public function update(UpdateRequest $request, AzmayeshSample $azmayeshSample): JsonResponse { $azmayesh = Azmayesh::query()->findOrFail($request->azmayesh_id); @@ -83,7 +83,7 @@ class AzmayeshSampleController extends Controller /** * Remove the specified resource from storage. */ - public function destroy(AzmayeshSample $azmayeshSample) + public function destroy(AzmayeshSample $azmayeshSample): JsonResponse { $azmayeshSample->delete(); diff --git a/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php b/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php index 1f9f0b8d..87d7af75 100644 --- a/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php +++ b/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php @@ -3,10 +3,14 @@ namespace App\Http\Controllers\V3\Azmayesh; use App\Http\Controllers\Controller; +use App\Http\Requests\V3\AzmayeshType\StoreRequest; +use App\Http\Requests\V3\AzmayeshType\UpdateRequest; use App\Http\Traits\ApiResponse; +use App\Models\AzmayeshField; use App\Models\AzmayeshType; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class AzmayeshTypeController extends Controller { @@ -25,4 +29,69 @@ class AzmayeshTypeController extends Controller return $this->successResponse($fields); } + + public function store(StoreRequest $request): JsonResponse + { + DB::transaction(function () use ($request) + { + $azmayeshType = AzmayeshType::query()->create([ + 'name' => $request->name + ]); + + $fieldsID = []; + + foreach ($request->fields as $field) + { + $azmayeshField = AzmayeshField::query()->firstOrCreate($field, $field); + $fieldsID[] = $azmayeshField->id; + } + + $azmayeshType->azmayeshFields()->attach($fieldsID); + }); + + return $this->successResponse(); + } + + /** + * Display the specified resource. + */ + public function show(AzmayeshType $azmayeshType): JsonResponse + { + return $this->successResponse($azmayeshType->load(['azmayeshFields'])); + } + + /** + * Update the specified resource in storage. + */ + public function update(UpdateRequest $request, AzmayeshType $azmayeshType): JsonResponse + { + DB::transaction(function () use ($request, $azmayeshType) + { + $azmayeshType->update([ + 'name' => $request->name + ]); + + $fieldsID = []; + + foreach ($request->fields as $field) + { + $azmayeshField = AzmayeshField::query()->updateOrCreate($field, $field); + $fieldsID[] = $azmayeshField->id; + } + + $azmayeshType->azmayeshFields()->sync($fieldsID); + }); + + return $this->successResponse(); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(AzmayeshType $azmayeshType): JsonResponse + { + $azmayeshType->delete(); + + return $this->successResponse(); + } } diff --git a/app/Http/Requests/V3/AzmayeshType/StoreRequest.php b/app/Http/Requests/V3/AzmayeshType/StoreRequest.php new file mode 100644 index 00000000..e575eb20 --- /dev/null +++ b/app/Http/Requests/V3/AzmayeshType/StoreRequest.php @@ -0,0 +1,29 @@ +|string> + */ + public function rules(): array + { + return [ + 'name' => 'required|string', + 'fields' => 'required|array', + ]; + } +} diff --git a/app/Http/Requests/V3/AzmayeshType/UpdateRequest.php b/app/Http/Requests/V3/AzmayeshType/UpdateRequest.php new file mode 100644 index 00000000..deb49567 --- /dev/null +++ b/app/Http/Requests/V3/AzmayeshType/UpdateRequest.php @@ -0,0 +1,29 @@ +|string> + */ + public function rules(): array + { + return [ + 'name' => 'required|string', + 'fields' => 'required|array', + ]; + } +} diff --git a/routes/v3.php b/routes/v3.php index 7dc98798..4a75b278 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -42,6 +42,10 @@ Route::prefix('azmayesh_types') ->group(function () { Route::get('/', 'index')->name('index'); Route::get('/fields/{azmayeshType}', 'fields')->name('fields'); + Route::get('/{azmayeshType}', 'show')->name('show'); + Route::post('/store', 'store')->name('store'); + Route::post('/update/{azmayeshType}', 'update')->name('update'); + Route::post('/delete/{azmayeshType}', 'destroy')->name('delete'); }); Route::prefix('azmayesh_samples')