Advertisement
AhmetUstun

02. Parking

Jun 27th, 2021 (edited)
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. class Parking {
  2.  
  3. constructor(capacity) {
  4. this.capacity = capacity;
  5. this.vehicles = [];
  6. }
  7.  
  8. addCar(carModel, carNumber) {
  9.  
  10. if (this.capacity <= this.vehicles.length) {
  11. throw new Error('Not enough parking space.');
  12. }
  13.  
  14. let car = {
  15. carModel: carModel,
  16. carNumber: carNumber,
  17. payed: false
  18. };
  19.  
  20. this.vehicles.push(car);
  21. return `The ${carModel}, with a registration number ${carNumber}, parked.`;
  22. }
  23.  
  24. removeCar(carNumber) {
  25.  
  26. if (this.vehicles.some(car => car.carNumber === carNumber)) {
  27.  
  28. let car = this.vehicles.find(car => car.carNumber === carNumber);
  29. let index = this.vehicles.indexOf(car);
  30.  
  31. if (car.payed === false) {
  32. throw new Error(`${carNumber} needs to pay before leaving the parking lot.`);
  33. } else {
  34. this.vehicles.splice(index, 1);
  35. return `${carNumber} left the parking lot.`;
  36. }
  37.  
  38. } else {
  39. throw new Error('The car, you\'re looking for, is not found.');
  40. }
  41. }
  42.  
  43. pay(carNumber) {
  44.  
  45. if (this.vehicles.some(car => car.carNumber === carNumber)) {
  46.  
  47. let car = this.vehicles.find(car => car.carNumber === carNumber);
  48.  
  49. if (car.payed === false) {
  50. car.payed = true;
  51. return `${carNumber}\'s driver successfully payed for his stay.`;
  52.  
  53. } else {
  54. throw new Error(`${carNumber}\'s driver has already payed his ticket.`);
  55. }
  56.  
  57. } else {
  58. throw new Error('The car, you\'re looking for, is not found.');
  59. }
  60. }
  61.  
  62. getStatistics(carNumber) {
  63.  
  64. if (this.vehicles.some(car => car.carNumber === carNumber)) {
  65.  
  66. let car = this.vehicles.find(car => car.carNumber === carNumber);
  67.  
  68. let stringFlag = car.payed === false
  69. ? 'Not payed'
  70. : 'Has payed';
  71.  
  72. return `${car.carModel} == ${car.carNumber} - ${stringFlag}`;
  73.  
  74. } else {
  75.  
  76. let emptySlots = this.capacity - this.vehicles.length;
  77. let result = [`The Parking Lot has ${emptySlots} empty spots left.`];
  78.  
  79. this.vehicles.sort((a, b) => a.carModel.localeCompare(b.carModel)).forEach(car => {
  80.  
  81. let stringFlag = car.payed === false
  82. ? 'Not payed'
  83. : 'Has payed';
  84.  
  85. result.push(`${car.carModel} == ${car.carNumber} - ${stringFlag}`);
  86. });
  87.  
  88. return result.join('\n');
  89. }
  90. }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement