json( Spbu::query()->orderByDesc('created_at')->get() ); } public function store(Request $request): JsonResponse { $validator = $this->validator($request); if ($validator->fails()) { return $this->validationError($validator); } $spbu = Spbu::create([ ...$validator->validated(), 'created_at' => now(), ]); return response()->json([ 'success' => true, 'message' => 'Data SPBU berhasil disimpan', 'id' => $spbu->id, ], 201); } public function update(Request $request, Spbu $spbu): JsonResponse { $validator = $this->validator($request); if ($validator->fails()) { return $this->validationError($validator); } $spbu->update($validator->validated()); return response()->json([ 'success' => true, 'message' => 'Data SPBU berhasil diperbarui', ]); } public function destroy(Spbu $spbu): JsonResponse { $spbu->delete(); return response()->json([ 'success' => true, 'message' => 'Data SPBU berhasil dihapus', ]); } private function validator(Request $request): \Illuminate\Validation\Validator { $validator = Validator::make($request->all(), [ 'nama_spbu' => ['required', 'string', 'max:255'], 'nomor_spbu' => ['required', 'string', 'max:50'], 'status' => [ 'required', Rule::in([ Spbu::STATUS_BUKA_24_JAM, Spbu::STATUS_TIDAK_BUKA_24_JAM, ]), ], 'latitude' => ['required', 'numeric', 'between:-90,90'], 'longitude' => ['required', 'numeric', 'between:-180,180'], ]); $validator->after(function ($validator) use ($request): void { if ((float) $request->input('latitude') === 0.0 && (float) $request->input('longitude') === 0.0) { $validator->errors()->add('latitude', 'Koordinat tidak valid.'); } }); return $validator; } private function validationError(\Illuminate\Validation\Validator $validator): JsonResponse { return response()->json([ 'success' => false, 'message' => 'Validasi gagal', 'errors' => $validator->errors(), ], 422); } }