Description
Prerequisites to run :
Java : 8
Maven
Build : mvn clean install
Run tests : mvn test
Please refer junit tests and write own tests check below instructions
A parking lot is a dedicated area that is intended for parking vehicles. Parking lots are present in every city and suburban area. Shopping malls, stadiums, airports, train stations, and similar venues often feature a parking lot with a large capacity. A parking lot can spread across multiple buildings with multiple floors or can be in a large open area.
The parking lot will allow different types of vehicles to be parked:
○ Motorcycles/Scooters
○ Cars/SUVs
○ Buses/Trucks
Each vehicle will occupy a single spot and the spot size will be different for different vehicles.
The number of spots per vehicle type will be different for different parking lots. For example
- Motorcycles/scooters: 100 spots
- Cars/SUVs: 80 spots
- Buses/Trucks: 40 spots
When a vehicle is parked, a parking ticket should be generated with the spot number and the entry date-time.
When a vehicle is unparked, a receipt should be generated with the entry date-time, exit date-time, and the applicable fees to be paid.
How to create Fee Models
List<FeeModel> airportFeeModel = new ArrayList<>();
FeeModel.Builder feeModelBuilder = FeeModel.Builder.newInstance();
airportFeeModel.add(feeModelBuilder.setStart(0).setEnd(1).setPrice(0).setVehicleType(VehicleType.MOTORCYCLE)
.setPaymentCriteria(PaymentCriteria.HOURS).build());
airportFeeModel.add(feeModelBuilder.setStart(1).setEnd(7).setPrice(40).setVehicleType(VehicleType.MOTORCYCLE)
.setPaymentCriteria(PaymentCriteria.HOURS).build());
airportFeeModel.add(new FeeModel(1,7,40, VehicleType.MOTORCYCLE, PaymentCriteria.HOURS));
airportFeeModel.add(new FeeModel(8,24,60, VehicleType.MOTORCYCLE, PaymentCriteria.HOURS));
airportFeeModel.add(new FeeModel(24,-1,80, VehicleType.MOTORCYCLE, PaymentCriteria.DAYS));
airportFeeModel.add(new FeeModel(0,11,60, VehicleType.CAR, PaymentCriteria.HOURS));
airportFeeModel.add(new FeeModel(12,24,80, VehicleType.CAR, PaymentCriteria.HOURS));
How to create spot allocations
Map<ParkingSpotType, Integer> spotAllocations = new HashMap<>();
spotAllocations.put(ParkingSpotType.MOTORCYCLE, 0);
spotAllocations.put(ParkingSpotType.CAR, 1);
spotAllocations.put(ParkingSpotType.TRUCK, 0);
How to create Parking lot
//createNewParkingLot(int totalParkinglevels, int parkingSpotTypesCount, Map<ParkingSpotType, Integer> noOfSpotsPerSpotType, List<FeeModel> feeModelList)
ParkingLot parkingLot = parkingLotFactory.createNewParkingLot(5, ParkingSpotType.values().length, spotAllocations, airportFeeModel);
How to create a Vehicle and Car?
Vehicle vehicle1 = new Vehicle(1, VehicleType.CAR);
VehicleOwner carOwner1 = new VehicleOwner("Chinnu", vehicle1);
How to create a Vehicle and Owner?
Vehicle car = new Vehicle(1, VehicleType.CAR);
VehicleOwner carOwner = new VehicleOwner("Chinnu", vehicle);
How to park a vehicle?
Vehicle car = new Vehicle(1, VehicleType.CAR);
VehicleOwner carOwner = new VehicleOwner("Chinnu", vehicle);
How to park a vehicle?
carOwner.parkVehicle(parkingLot, LocalDateTime.parse("29-May-2022 14:04:07", formatter));
Output : Parking Ticket
How to unPark a vehicle?
carOwner.parkVehicle(parkingLot, LocalDateTime.parse("29-May-2022 14:04:07", formatter));
Output : Payment Ticket Ticket