105 lines
3.0 KiB
PHP
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
|
|
]);
|
|
|
|
}
|
|
|
|
} |