Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Parking {
- constructor(capacity) {
- this.capacity = capacity
- this.vehicles = []
- }
- addCar(carModel, carNumber) {
- if (this.vehicles.length === this.capacity) {
- throw new Error('Not enough parking space.')
- }
- const newVehicle = {
- carModel,
- carNumber,
- payed: false
- }
- this.vehicles.push(newVehicle)
- return `The ${carModel}, with a registration number ${carNumber}, parked.`
- }
- removeCar(carNumber) {
- const foundCar = this.vehicles.find(veh => veh.carNumber === carNumber)
- if (!foundCar) {
- throw new Error("The car, you're looking for, is not found.")
- }
- if (!foundCar.payed) {
- throw new Error(`${carNumber} needs to pay before leaving the parking lot.`)
- }
- this.vehicles = this.vehicles.filter(v => v.carNumber !== carNumber)
- return `${carNumber} left the parking lot.`
- }
- pay(carNumber) {
- const foundCar = this.vehicles.find(veh => veh.carNumber === carNumber)
- if (!foundCar) {
- throw new Error(`${carNumber} is not in the parking lot.`)
- }
- if (foundCar.payed) {
- throw new Error(`${carNumber}'s driver has already payed his ticket.`)
- }
- foundCar.payed = true
- return `${carNumber}'s driver successfully payed for his stay.`
- }
- // carNumber is optional
- getStatistics(carNumber) {
- if (carNumber === undefined) {
- const emptySlots = this.capacity - this.vehicles.length
- const allVehiclesStats = this.vehicles.map(this.getVehicleStats)
- return [`The Parking Lot has ${emptySlots} empty spots left.`, ...allVehiclesStats].join('\n')
- }
- const foundCar = this.vehicles.find(veh => veh.carNumber === carNumber)
- return this.getVehicleStats(foundCar)
- }
- getVehicleStats({ carModel, carNumber, payed }) {
- return `${carModel} == ${carNumber} - ${payed ? 'Has payed' : 'Not payed'}`
- }
- }
- const parking = new Parking(12)
- console.log(parking.addCar('Volvo t600', 'TX3691CA'))
- console.log(parking.getStatistics())
- console.log(parking.pay('TX3691CA'))
- console.log(parking.removeCar('TX3691CA'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement