-
Notifications
You must be signed in to change notification settings - Fork 0
/
checkpoint-4.js
108 lines (98 loc) · 2.33 KB
/
checkpoint-4.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
class Reservation {
constructor(flight, passenger) {
this.flight = flight;
this.passenger = passenger;
}
reservationDetails() {
return {
"origin": this.flight.origin,
"destination": this.flight.destination,
"date": this.flight.date,
"reservedBy": this.passenger.fullName
}
}
}
class Flight {
constructor(origin, destination, date, capacity, price) {
this.origin = origin;
this.destination = destination;
this.date = date;
this.capacity = capacity;
this.price = price;
this.passengers = [];
}
sellTicket(passenger) {
if (this.capacity > 0) {
let reservation = new Reservation(this, passenger);
this.passengers.push({
fullName: passenger.fullName,
age: passenger.age
});
passenger.addFlight(this);
this.capacity--;
return reservation;
}
}
}
class Passenger {
constructor(name, lastName, age) {
this.fullName = name + " " + lastName;
this.age = age;
this.flights = [];
}
addFlight(flight) {
this.flights.push(
{
'origin': flight.origin,
'destination': flight.destination,
'date': flight.date,
'price': flight.price
})
}
}
class EconomicFlight extends Flight {
sellTicket(passenger) {
if (passenger.age < 18 || passenger.age > 65) {
this.price *= 0.80
}
return super.sellTicket(passenger);
}
}
class PremiumFlight extends Flight {
constructor(origin, destination, date, capacity, price, specialService) {
super(origin, destination, date, capacity, price);
this.price += specialService;
}
sellTicket(passenger) {
return super.sellTicket(passenger);
}
}
const flight = new Flight("CDMX", "Guadalajara", "2022-01-01", 5, 1000);
const passenger = new Passenger("Juan", "Perez", 30);
const reservation = flight.sellTicket(passenger);
console.log(passenger.flights);
/*[
{
origin: "CDMX",
destination: "Guadalajara",
date: "2022-01-01",
price: 1000,
},
]*/
console.log(flight.passengers);
/*[
{
fullName: "Juan Perez",
age: 30,
},
]*/
const economicFlight = new EconomicFlight(
"New York",
"Paris",
"2023-12-25",
100,
200
);
const passenger2 = new Passenger("Pedro", "Gutierrez", 17);
const reservation2 = economicFlight.sellTicket(passenger2);
console.log(reservation2.flight.price); //160