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