From 117bf0269e24c7923c01614d2a3dd019c460ca96 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 9 Nov 2024 11:36:16 +0330 Subject: [PATCH] add nested array validation to form requests --- .../V3/Azmayesh/AzmayeshTypeController.php | 23 ++++++++++++++++++- .../Requests/V3/AzmayeshType/StoreRequest.php | 4 ++++ .../V3/AzmayeshType/UpdateRequest.php | 4 ++++ ...ate_azmayesh_field_azmayesh_type_table.php | 4 ++-- routes/v3.php | 1 + 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php b/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php index 87d7af75..f521c273 100644 --- a/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php +++ b/app/Http/Controllers/V3/Azmayesh/AzmayeshTypeController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\V3\Azmayesh; +use App\Facades\DataTable\DataTableFacade; use App\Http\Controllers\Controller; use App\Http\Requests\V3\AzmayeshType\StoreRequest; use App\Http\Requests\V3\AzmayeshType\UpdateRequest; @@ -16,7 +17,27 @@ class AzmayeshTypeController extends Controller { use ApiResponse; - public function index(): JsonResponse + public function index(Request $request): JsonResponse + { + $columns = array( + 'id', 'name' + ); + + $allowedFilters = $columns; + $allowedSortings = $columns; + + $query = AzmayeshType::query(); + + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings); + + return response()->json($data); + } + + public function list(): JsonResponse { $allTypes = AzmayeshType::all(); diff --git a/app/Http/Requests/V3/AzmayeshType/StoreRequest.php b/app/Http/Requests/V3/AzmayeshType/StoreRequest.php index e575eb20..2c22ffc1 100644 --- a/app/Http/Requests/V3/AzmayeshType/StoreRequest.php +++ b/app/Http/Requests/V3/AzmayeshType/StoreRequest.php @@ -24,6 +24,10 @@ class StoreRequest extends FormRequest return [ 'name' => 'required|string', 'fields' => 'required|array', + 'fields.*.name' => 'required|string', + 'fields.*.unit' => 'string', + 'fields.*.type' => 'required|string', + 'fields.*.option' => 'string', ]; } } diff --git a/app/Http/Requests/V3/AzmayeshType/UpdateRequest.php b/app/Http/Requests/V3/AzmayeshType/UpdateRequest.php index deb49567..b7af342e 100644 --- a/app/Http/Requests/V3/AzmayeshType/UpdateRequest.php +++ b/app/Http/Requests/V3/AzmayeshType/UpdateRequest.php @@ -24,6 +24,10 @@ class UpdateRequest extends FormRequest return [ 'name' => 'required|string', 'fields' => 'required|array', + 'fields.*.name' => 'required|string', + 'fields.*.unit' => 'string', + 'fields.*.type' => 'required|string', + 'fields.*.option' => 'string', ]; } } diff --git a/database/migrations/2024_10_22_152052_create_azmayesh_field_azmayesh_type_table.php b/database/migrations/2024_10_22_152052_create_azmayesh_field_azmayesh_type_table.php index 5507811c..8d1505ac 100644 --- a/database/migrations/2024_10_22_152052_create_azmayesh_field_azmayesh_type_table.php +++ b/database/migrations/2024_10_22_152052_create_azmayesh_field_azmayesh_type_table.php @@ -13,8 +13,8 @@ return new class extends Migration { Schema::create('azmayesh_field_azmayesh_type', function (Blueprint $table) { $table->id(); - $table->foreignId('azmayesh_field_id')->constrained('azmayesh_fields'); - $table->foreignId('azmayesh_type_id')->constrained('azmayesh_types'); + $table->foreignId('azmayesh_field_id')->constrained('azmayesh_fields')->cascadeOnDelete(); + $table->foreignId('azmayesh_type_id')->constrained('azmayesh_types')->cascadeOnDelete(); $table->timestamps(); }); } diff --git a/routes/v3.php b/routes/v3.php index 4a75b278..8a43ad37 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -41,6 +41,7 @@ Route::prefix('azmayesh_types') ->controller(AzmayeshTypeController::class) ->group(function () { Route::get('/', 'index')->name('index'); + Route::get('/list', 'list')->name('list'); Route::get('/fields/{azmayeshType}', 'fields')->name('fields'); Route::get('/{azmayeshType}', 'show')->name('show'); Route::post('/store', 'store')->name('store');