Files
2026-06-11 14:53:35 +07:00

100 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Spbu;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class SpbuController extends Controller
{
public function index(): JsonResponse
{
return response()->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);
}
}