create panel for azmayesh type crud

This commit is contained in:
2024-11-09 10:52:57 +03:30
parent 6eb7d6c55e
commit fbb4db5e60
5 changed files with 134 additions and 3 deletions

View File

@@ -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();

View File

@@ -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();
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests\V3\AzmayeshType;
use Illuminate\Foundation\Http\FormRequest;
class StoreRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'name' => 'required|string',
'fields' => 'required|array',
];
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Http\Requests\V3\AzmayeshType;
use Illuminate\Foundation\Http\FormRequest;
class UpdateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
'name' => 'required|string',
'fields' => 'required|array',
];
}
}

View File

@@ -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')