SmartCarParking/app/Http/Controllers/Api/CarParkingController.php
2025-12-11 07:38:56 +00:00

105 lines
3.0 KiB
PHP

<?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
]);
}
}