100 lines
2.7 KiB
PHP
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);
|
|
}
|
|
}
|