From 57c6863cb370e69038577573e6608dde8cca422d Mon Sep 17 00:00:00 2001 From: Irwan Cahyono Date: Mon, 2 Mar 2026 13:39:06 +0700 Subject: [PATCH 1/2] cors config --- config/cors.php | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 config/cors.php diff --git a/config/cors.php b/config/cors.php new file mode 100644 index 0000000..8a39e6d --- /dev/null +++ b/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; From 0c7aeedf5535395113736162484fa835360063cb Mon Sep 17 00:00:00 2001 From: "fauzgabriel@gmail.com" Date: Tue, 10 Mar 2026 13:31:56 +0700 Subject: [PATCH 2/2] inspeksi tanaman --- .../Controllers/Api/InspeksiController.php | 159 ++++++++++++++++++ app/Models/Map/Inspeksi.php | 28 +++ routes/api.php | 1 + routes/web.php | 4 +- 4 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 app/Http/Controllers/Api/InspeksiController.php create mode 100644 app/Models/Map/Inspeksi.php diff --git a/app/Http/Controllers/Api/InspeksiController.php b/app/Http/Controllers/Api/InspeksiController.php new file mode 100644 index 0000000..ee61fc5 --- /dev/null +++ b/app/Http/Controllers/Api/InspeksiController.php @@ -0,0 +1,159 @@ +get('size') ?: 10; + + $master = Inspeksi::query(); + + if ($request->has('search')) { + $s = $request->get('search'); + $s = strtolower($s); + $master->where(function($query) use ($s) { + $query->whereRaw('lower(kode) like (?)',["%{$s}%"]) + ->orWhereRaw('lower(nama) like (?)',["%{$s}%"]); + }); + } + if ($request->has('sort')) { + $order = $request->get('sort'); + $d = substr($order, 0, 1); + $dir = $d === '-' ? 'desc' : 'asc'; + $order = $d === '-' ? substr($order, 1) : $order; + $master->orderBy($order, $dir); + } + if ($request->has('kecamatan_id')) { + $master->where('kecamatan_id', $request->get('kecamatan_id')); + } + + $masterList = $master->paginate($size); + + return response()->json($masterList); + } + public function show(string $id) + { + Gate::authorize('petani'); + + $lahan = Inspeksi::findOrFail($id); + + return response()->json($lahan); + } + public function store(Request $request): JsonResponse + { + Gate::authorize('petani'); + + $user = Auth::user(); + $profile = $user->profile; + + $validated = $request->validate([ + 'plant_id' => ['required', 'numeric'], + 'land_id' => ['required', 'numeric'], + 'farmer_id' => ['numeric'], + 'health_status' => ['string'], + 'productivity_status' => ['string'], + ]); + // dd($validated); + $lahan = Inspeksi::create([ + "tanaman_id" => $validated["plant_id"], + "lahan_id" => $validated['land_id'], + "petani_id"=> $validated['farmer_id'], + "inspection_date"=> $request['inspection_date'], + "health_status"=> $request['health_status'], + "productivity_status"=> $validated['productivity_status'], + "issue_type"=> $request['issue_type'], + "issue_description"=> $request['issue_description'], + "recommendation"=> $request['recommendation'], + "notes"=> $request['notes'], + "created_date"=> $validated['created_date'] ?? null, + "sync_status"=> $validated['sync_status'] ?? 'synced' + ]); + + return response()->json($lahan, 201); + } + public function update(Request $request, string $id) + { + Gate::authorize('petani'); + + $lahan = Inspeksi::findOrFail($id); + + $validated = $request->validate([ + 'tanaman_id' => ['required', 'string', 'max:255'], + 'lahan_id' => ['required', 'string'], + 'petani_id' => ['numeric'], + 'health_status' => ['string'], + 'productivity_status' => ['numeric'], + ]); + + $lahan->update($validated); + + return response()->json($lahan); + } + public function destroy(string $id) + { + Gate::authorize('petani'); + + $lahan = Inspeksi::findOrFail($id); + $lahan->delete(); + + return response()->json(null, 204); + } + public function batchUpsert(Request $request): JsonResponse + { + Gate::authorize('petani'); + $user = Auth::user(); + $profile = $user->profile; + + $validated = $request->validate([ + 'tanaman_id' => ['required', 'string', 'max:255'], + 'lahan_id' => ['required', 'string'], + 'petani_id' => ['numeric'], + 'health_status' => ['string'], + 'productivity_status' => ['numeric'], + ]); + + $inspections = []; + foreach ($validated['inspections'] as $insoection) { + $inspection[] = [ + "plant_id" => $insoection["plant_id"], + "land_id" => $insoection['land_id'], + "farmer_id"=> $insoection['farmer_id'], + "inspection_date"=> $insoection['inspection_date'], + "health_status"=> $insoection['health_status'], + "productivity_status"=> $insoection['productivity_status'], + "issue_type"=> $insoection['issue_type'], + "issue_description"=> $insoection['issue_description'], + "recommendation"=> $insoection['recommendation'], + "notes"=> $insoection['notes'], + "created_date"=> $insoection['created_date'], + "sync_status"=> $insoection['sync_status'] + ]; + } + + Inspeksi::upsert($inspections, + ['id'], + [ + "plant_id", + "land_id", + "farmer_id", + "inspection_date", + "health_status", + "productivity_status", + "issue_type", + "issue_description", + "recommendation", + "notes", + "created_date", + "sync_status" + ]); + + return response()->json(null, 204); + } +} \ No newline at end of file diff --git a/app/Models/Map/Inspeksi.php b/app/Models/Map/Inspeksi.php new file mode 100644 index 0000000..15f1472 --- /dev/null +++ b/app/Models/Map/Inspeksi.php @@ -0,0 +1,28 @@ +except(['create', 'edit']); Route::apiResource('/tanaman', \App\Http\Controllers\Api\TanamanController::class)->except(['create', 'edit']); + Route::apiResource('/inspeksi', \App\Http\Controllers\Api\InspeksiController::class)->except(['create', 'edit']); }); Route::middleware('auth:sanctum') diff --git a/routes/web.php b/routes/web.php index bc5d34b..70853af 100644 --- a/routes/web.php +++ b/routes/web.php @@ -41,6 +41,6 @@ Route::get('/getkecamatan', [App\Http\Controllers\KecamatanController::class, 'getKecamatan'])->name('kecamatan.list'); // Kelurahan - Route::get('/desakelurahan', [App\Http\Controllers\KelurahanController::class, 'index'])->name('desakelurahan.index'); - Route::get('/getdesakelurahan', [App\Http\Controllers\KelurahanController::class, 'getDesaKelurahan'])->name('desakelurahan.list'); + Route::get('/desakelurahan', [App\Http\Controllers\DesaKelurahanController::class, 'index'])->name('desakelurahan.index'); + Route::get('/getdesakelurahan', [App\Http\Controllers\DesaKelurahanController::class, 'getDesaKelurahan'])->name('desakelurahan.list'); }); \ No newline at end of file