|
|
@@ -61,27 +61,27 @@ public class ParkingLotService {
|
|
|
return carSlot;
|
|
|
}
|
|
|
|
|
|
- public CarSlot parkAtParkingLot(Long parkingLotId, CarSlot carSlotItem) {
|
|
|
+ public CarSlot parkAtParkingLot(Long parkingLotId, CarSlot slot) {
|
|
|
//check if the asked parking exists
|
|
|
ParkingLot parkingLot = findParkingLotByIdOrThrow(parkingLotId);
|
|
|
|
|
|
//check if there is available slots
|
|
|
- Layout layout = getLayoutByNameOrThrow(carSlotItem.getType(), parkingLot);
|
|
|
+ Layout layout = getLayoutByNameOrThrow(slot.getType(), parkingLot);
|
|
|
isAvailableOrThrow(layout);
|
|
|
//found & available spot
|
|
|
synchronized (this){
|
|
|
//double check locking
|
|
|
parkingLot = findParkingLotByIdOrThrow(parkingLotId);
|
|
|
- layout = getLayoutByNameOrThrow(carSlotItem.getType(), parkingLot);
|
|
|
+ layout = getLayoutByNameOrThrow(slot.getType(), parkingLot);
|
|
|
isAvailableOrThrow(layout);
|
|
|
Long slotId = layout.decrementAndGetID();
|
|
|
- carSlotItem.setSlot(slotId);
|
|
|
- carSlotItem.setParkingLotId(parkingLotId);
|
|
|
- carSlotItem.setArrivalTime(Instant.now());
|
|
|
- layout.getCarSlots().put(slotId, carSlotItem);
|
|
|
+ slot.setSlot(slotId);
|
|
|
+ slot.setParkingLotId(parkingLotId);
|
|
|
+ slot.setArrivalTime(Instant.now());
|
|
|
+ layout.getCarSlots().put(slotId, slot);
|
|
|
persistenceManager.save(parkingLot);
|
|
|
}
|
|
|
- return carSlotItem;
|
|
|
+ return slot;
|
|
|
}
|
|
|
|
|
|
private void isAvailableOrThrow(Layout layout){
|