first commit
This commit is contained in:
commit
83e28827a1
64 files changed
+11127
No files matched your search
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Car;
|
||||
use App\Models\ParkingRecord;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CarParkingController extends Controller
|
||||
{
|
||||
|
||||
public function registerCar(Request $request) {
|
||||
|
||||
$data = $request->validate([
|
||||
'plate_number' => 'required|string|max:20',
|
||||
]);
|
||||
|
||||
$car = Car::where('plate_number', $data['plate_number'])->first();
|
||||
|
||||
if ($car) {
|
||||
return response()->json(['message' => 'Car already registered', 'car' => $car], 200);
|
||||
}
|
||||
|
||||
$car = Car::create($data);
|
||||
|
||||
return response()->json(['message' => 'Car registered successfully', 'car' => $car], 201);
|
||||
|
||||
}
|
||||
|
||||
public function registerEntry(Request $request) {
|
||||
|
||||
$data = $request->validate([
|
||||
'plate_number' => 'required|string|exists:cars,plate_number',
|
||||
]);
|
||||
|
||||
$car = Car::where('plate_number', $data['plate_number'])->first();
|
||||
|
||||
// Check if there is an active parking record (entry_time set but exit_time null)
|
||||
$activeParking = ParkingRecord::where('car_id', $car->id)
|
||||
->whereNull('exit_time')
|
||||
->first();
|
||||
|
||||
if ($activeParking) {
|
||||
return response()->json(['message' => 'Car already parked inside'], 400);
|
||||
}
|
||||
|
||||
$parkingRecord = ParkingRecord::create([
|
||||
'car_id' => $car->id,
|
||||
'entry_time' => now(),
|
||||
]);
|
||||
|
||||
return response()->json(['message' => 'Car entry registered', 'parking_record' => $parkingRecord], 201);
|
||||
|
||||
}
|
||||
|
||||
public function registerExit(Request $request) {
|
||||
|
||||
$data = $request->validate([
|
||||
'plate_number' => 'required|string|exists:cars,plate_number',
|
||||
]);
|
||||
|
||||
$car = Car::where('plate_number', $data['plate_number'])->first();
|
||||
|
||||
$activeParking = ParkingRecord::where('car_id', $car->id)
|
||||
->whereNull('exit_time')
|
||||
->first();
|
||||
|
||||
if (!$activeParking) {
|
||||
return response()->json(['message' => 'Car is not currently parked inside'], 400);
|
||||
}
|
||||
|
||||
$activeParking->exit_time = now();
|
||||
$activeParking->save();
|
||||
|
||||
return response()->json(['message' => 'Car exit registered', 'parking_record' => $activeParking]);
|
||||
|
||||
}
|
||||
|
||||
public function countCurrentParking() {
|
||||
|
||||
$count = ParkingRecord::whereNull('exit_time')->count();
|
||||
return response()->json(['current_parked_cars' => $count]);
|
||||
|
||||
}
|
||||
|
||||
public function getCarHistory(Request $request) {
|
||||
|
||||
$data = $request->validate([
|
||||
'plate_number' => 'required|string|exists:cars,plate_number',
|
||||
]);
|
||||
|
||||
$car = Car::where('plate_number', $data['plate_number'])->first();
|
||||
$history = $car->parkingRecords()->orderBy('entry_time', 'desc')->get(['entry_time', 'exit_time']);
|
||||
|
||||
return response()->json([
|
||||
'plate_number' => $car->plate_number,
|
||||
'history' => $history
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user