chore: sync repository snapshot
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Spbu extends Model
|
||||
{
|
||||
public const STATUS_BUKA_24_JAM = 'Buka 24 Jam';
|
||||
public const STATUS_TIDAK_BUKA_24_JAM = 'Tidak Buka 24 Jam';
|
||||
|
||||
protected $table = 'spbu';
|
||||
|
||||
public $timestamps = false;
|
||||
|
||||
protected $fillable = [
|
||||
'nama_spbu',
|
||||
'nomor_spbu',
|
||||
'status',
|
||||
'latitude',
|
||||
'longitude',
|
||||
'created_at',
|
||||
];
|
||||
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'latitude' => 'float',
|
||||
'longitude' => 'float',
|
||||
'created_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Database\Factories\UserFactory;
|
||||
use Illuminate\Database\Eloquent\Attributes\Fillable;
|
||||
use Illuminate\Database\Eloquent\Attributes\Hidden;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
#[Fillable(['name', 'email', 'password'])]
|
||||
#[Hidden(['password', 'remember_token'])]
|
||||
class User extends Authenticatable
|
||||
{
|
||||
/** @use HasFactory<UserFactory> */
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* Get the attributes that should be cast.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function casts(): array
|
||||
{
|
||||
return [
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user