From d330908bd364ee2e73cc74d751a696f362185875 Mon Sep 17 00:00:00 2001 From: joddyabott Date: Sun, 18 May 2025 18:12:15 +0330 Subject: [PATCH] create controller --- .../Dashboard/Mission/CartableController.php | 79 ++++++++++--------- app/Http/Requests/V3/Mission/StoreRequest.php | 46 +++++++++++ .../Requests/V3/Mission/UpdateRequest.php | 28 +++++++ app/Services/Mission/CartableService.php | 52 ++++++++++++ 4 files changed, 169 insertions(+), 36 deletions(-) create mode 100644 app/Http/Requests/V3/Mission/StoreRequest.php create mode 100644 app/Http/Requests/V3/Mission/UpdateRequest.php create mode 100644 app/Services/Mission/CartableService.php diff --git a/app/Http/Controllers/V3/Dashboard/Mission/CartableController.php b/app/Http/Controllers/V3/Dashboard/Mission/CartableController.php index 518bd4c8..853e91fa 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/CartableController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/CartableController.php @@ -2,62 +2,69 @@ namespace App\Http\Controllers\V3\Dashboard\Mission; +use App\Facades\DataTable\DataTableFacade; use App\Http\Controllers\Controller; +use App\Http\Requests\V3\Mission\StoreRequest; +use App\Http\Traits\ApiResponse; +use App\Models\CMMSMachine; +use App\Models\Mission; +use App\Models\Rahdaran; +use App\Services\Missions\CartableService; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class CartableController extends Controller { - /** - * Display a listing of the resource. - */ - public function index() + use ApiResponse; + public function index(Request $request,CartableService $cartableService): JsonResponse { - // + return response()->json($cartableService->datatable($request)); } - /** - * Show the form for creating a new resource. - */ - public function create() + public function store(StoreRequest $request): JsonResponse { - // + + $mission = Mission::query()->create([ + 'user_id'=> auth()->user()->id(), + 'state_id' => $request->state_id, + 'state_name' => $request->state_name, + 'requested_machine_type' =>$request->requested_machine_type, + 'requested_machine_numbers' =>$request->requested_machine_numbers, + 'type' =>$request->type, + 'start_date' =>$request->start_date, + 'end_date' =>$request->end_date, + 'request_date' =>$request->request_date, + 'description' =>$request->description, + 'start_point' =>$request->start_point, + 'end_point' =>$request->end_point, + ]); + + if ($request->filled('machine_id')) { + $mission->machines()->attach($request->machine_ids); + } + + if ($request->filled('rahdar_id')) { + $mission->rahdars()->attach($request->rahdar_ids); + } + + return $this->successResponse(); + } - /** - * Store a newly created resource in storage. - */ - public function store(Request $request) + + public function show(Request $request,Mission $mission,CartableService $cartableService): JsonResponse { - // + return response()->json($cartableService->getMission($request->user(), $mission)); } - /** - * Display the specified resource. - */ - public function show(string $id) - { - // - } - /** - * Show the form for editing the specified resource. - */ - public function edit(string $id) - { - // - } - - /** - * Update the specified resource in storage. - */ public function update(Request $request, string $id) { // } - /** - * Remove the specified resource from storage. - */ + public function destroy(string $id) { // diff --git a/app/Http/Requests/V3/Mission/StoreRequest.php b/app/Http/Requests/V3/Mission/StoreRequest.php new file mode 100644 index 00000000..ceaf036e --- /dev/null +++ b/app/Http/Requests/V3/Mission/StoreRequest.php @@ -0,0 +1,46 @@ +user(); + return $user->hasPermissionTo('mission-manage-country') || + ($user->hasPermissionTo('mission-manage-province') && $this->province_id == $user->province_id)|| + ($user->hasPermissionTo('mission-manage-city') && $this->province_id == $user->province_id && $this->city_id == $user->city_id); + + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'machine_id' => 'nullable|exists:cmms_machines|id', + 'machine_id.*' => 'exists:cmms_machines,id', + 'rahdar_id' => 'required|exists:rahdaran|id', + 'rahdar_id.*' => 'exists:rahdaran,id', + 'state_id' => 'required|exists:mission_states|id', + 'state_name' => 'required|string|max:255', + 'requested_machine_type' => 'required|string|max:255', + 'requested_machine_numbers'=> 'required|string|max:255', + 'type' => 'required'|'string'|'max:50', + 'start_date' => 'required|date', + 'end_date' => 'required|date', + 'request_date' => 'required|date', + 'description' => 'nullable|string', + 'start_point' => 'required|string|max:255', + 'end_point' => 'required|string|max:255', + ]; + } +} diff --git a/app/Http/Requests/V3/Mission/UpdateRequest.php b/app/Http/Requests/V3/Mission/UpdateRequest.php new file mode 100644 index 00000000..59fd052d --- /dev/null +++ b/app/Http/Requests/V3/Mission/UpdateRequest.php @@ -0,0 +1,28 @@ +|string> + */ + public function rules(): array + { + return [ + // + ]; + } +} diff --git a/app/Services/Mission/CartableService.php b/app/Services/Mission/CartableService.php new file mode 100644 index 00000000..0cd41492 --- /dev/null +++ b/app/Services/Mission/CartableService.php @@ -0,0 +1,52 @@ +user(); + $allowedFilters = ['*']; + $allowedSortings = ['*']; + + $query = Mission::query(); + + if ($user->hasPermissionTo('mission-manage-city')) { + $query->where('city_id', $user->edarate_shahri_id); + } + elseif ($user->hasPermissionTo('mission-manage-province')) { + $query->where('province_id', $user->province_id); + } + elseif ($user->hasPermissionTo('mission-manage-country')) { + + } + return DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings + ); + + } + public function getMission(User $user, Mission $mission): Mission + { + $allowed = + $user->hasPermissionTo('mission-manage-country') || + ($user->hasPermissionTo('mission-manage-province') && + $mission->province_id === $user->province_id) || + ($user->hasPermissionTo('mission-manage-city') && + $mission->city_id === $user->edarate_shahri_id); + + abort_unless($allowed, 403); + + return $mission->load(['machines','rahdars']); + } +} \ No newline at end of file