diff --git a/app/Http/Controllers/PoskodController.php b/app/Http/Controllers/PoskodController.php index 4d75703..ed4fdaf 100644 --- a/app/Http/Controllers/PoskodController.php +++ b/app/Http/Controllers/PoskodController.php @@ -2,30 +2,32 @@ namespace App\Http\Controllers; +use App\Daerah; +use App\Negeri; use App\Poskod; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; +use Illuminate\Validation\ValidationException; class PoskodController extends Controller { - public function showAllPoskod() { $poskod = Poskod::on('mysql7') ->with(['negeri:kodnegeri,negeri', 'daerah:koddaerah,namadaerah']) ->when(request()->query_string, function ($q) { - return $q->where('poskod', 'like', '%' . request()->query_string . '%') - ->orWhereHas('negeri', function ($b) { - $b->where(DB::raw('lower(negeri)'), 'like', '%' . strtolower(request()->query_string) . '%'); - }) - ->orWhereHas('daerah', function ($b) { - $b->where(DB::raw('lower(namadaerah)'), 'like', '%' . strtolower(request()->query_string) . '%'); - }); + return $q + ->where('poskod', 'like', '%' . request()->query_string . '%') + ->orWhereHas('negeri', function ($b) { + $b->where(DB::raw('lower(negeri)'), 'like', '%' . strtolower(request()->query_string) . '%'); + }) + ->orWhereHas('daerah', function ($b) { + $b->where(DB::raw('lower(namadaerah)'), 'like', '%' . strtolower(request()->query_string) . '%'); + }); }) ->paginate(12); - return response() ->json($poskod) ->header('query_string', request()->query_string); @@ -44,14 +46,20 @@ class PoskodController extends Controller public function store(Request $request) { - if (Poskod::where('poskod', $request->poskod)->exists()) { - return response()->json("Daftar poskod tidak dibenarkan, poskod {$request->poskod} sudah wujud", 403); + try { + $validated = $this->validate($request, [ + 'poskod' => 'required|numeric|digits:5|unique:poskod,poskod', + 'koddaerah' => 'required|numeric', + 'kodnegeri' => 'required|numeric', + ]); + } catch (ValidationException $e) { + return response()->json($e, 403); } $created_poskod = Poskod::create([ - 'poskod' => $request->poskod, - 'koddaerah' => $request->koddaerah, - 'kodnegeri' => $request->kodnegeri, + 'poskod' => $validated['poskod'], + 'koddaerah' => $validated['koddaerah'], + 'kodnegeri' => $validated['kodnegeri'], ]); return response()->json($created_poskod, 200); @@ -59,19 +67,56 @@ class PoskodController extends Controller public function update(Request $request) { + $poskod = Poskod::find($request->recno); - if (Poskod::where('poskod', $request->poskod)->exists()) { - return response()->json("Kemaskini poskod tidak dibenarkan, poskod {$request->poskod} sudah wujud", 403); + try { + $validated = $this->validate($request, [ + 'poskod' => 'required|numeric|digits:5|unique:poskod,poskod,' . $poskod->poskod . ',poskod', + 'koddaerah' => 'required|numeric', + 'kodnegeri' => 'required|numeric', + ]); + } catch (ValidationException $e) { + return response()->json($e, 403); } - $updated_poskod = Poskod::find($request->recno); - - $updated_poskod->update([ - 'poskod' => $request->poskod, - 'koddaerah' => $request->koddaerah, - 'kodnegeri' => $request->kodnegeri, + $poskod->update([ + 'poskod' => $validated['poskod'], + 'koddaerah' => $validated['koddaerah'], + 'kodnegeri' => $validated['kodnegeri'], ]); - return response()->json($updated_poskod, 200); + $poskod_changes = $poskod->getChanges(); + + $getProperChanges = function($poskod_changes){ + + $changes = []; + + if(array_key_exists('poskod', $poskod_changes)){ + $poskod = $poskod_changes['poskod']; + + array_push($changes, compact('poskod')); + + } + + if(array_key_exists('koddaerah', $poskod_changes)){ + $daerah = Daerah::where('koddaerah', '=', $poskod_changes['koddaerah'])->first()->namadaerah; + + array_push($changes, compact('daerah')); + + } + + if(array_key_exists('kodnegeri', $poskod_changes)){ + $negeri = Negeri::where('kodnegeri', '=', $poskod_changes['kodnegeri'])->first()->negeri; + + array_push($changes, compact('negeri')); + } + + return array_merge(...$changes); + + }; + + $poskod_changes = $getProperChanges($poskod_changes); + + return response()->json(compact('poskod', 'poskod_changes'), 200); } }