Ride Sharing Design

Run Settings
LanguageJavaScript
Language Version
Run Command
const RideStatus={ IDLE:"IDLE", CREATED:"CREATED", WITHDRAWN:"WITHDRAWN", COMPLETED:"COMPLETED" } class Ride{ #id; #origin; #destination; #seats; #status=RideStatus.IDLE; static AMT_PER_KM=20 calculateFare(isPrivilleged){ const totalKm=this.#destination-this.#origin; // console.log("FARE",this.#destination,this.#origin,totalKm,Ride.AMT_PER_KM,this.#seats,isPrivilleged); if(this.#seats>1){ return totalKm*Ride.AMT_PER_KM*this.#seats* (isPrivilleged?0.5:0.75); } return totalKm*Ride.AMT_PER_KM*(isPrivilleged?0.75:1); } get getDesitnation(){ return this.#destination; } set setDestination(destination){ this.#destination=destination; //console.log(destination,"Set d") } get getId(){ return this.#id; } set setId(id){ this.#id=id; //console.log(id,"Set id") } get getOrigin(){ return this.#origin; } set setOrigin(origin){ this.#origin=origin; // console.log(origin,"Set or") } get getSeats(){ return this.#seats; } set setSeats(seats){ this.#seats=seats; // console.log(seats,"Set seats") } get getStatus(){ return this.#status; } set setStatus(status){ this.#status=RideStatus[status]; // console.log(status,"Set status") } } class Person{ constructor(name){ this.name=name; } } class Rider extends Person{ #completedRides; #currentRide; constructor(name){ super(name) this.name=name; this.#currentRide=new Ride(); this.#completedRides=[]; } createRide(id,origin, destination, seats){ if(origin>=destination){ console.log("Cannot create RIDE: Invalid ride values"); return } this.#currentRide.setId=id; this.#currentRide.setOrigin=origin; this.#currentRide.setDestination=destination; this.#currentRide.setSeats=seats; this.#currentRide.setStatus="CREATED"; } updateRide(id,origin, destination, seats){ if(this.#currentRide.getStatus==="WITHDRAWN"||this.#currentRide.getStatus==="COMPLETED"){ console.log(`Cannot update the ride. Ride was ${this.#currentRide.getStatus}`); return; } this.createRide(id,origin, destination, seats); } withdrawRide(id){ if(this.#currentRide.getId!==id){ console.log("Invalid Id current ride can't be withdrawn"); } if(this.#currentRide.getStatus!=="CREATED"){ console.log("Ride wasn't in progress. Can't withdraw ride"); return } this.#currentRide.setStatus=("WITHDRAWN"); //console.log(this.#currentRide.getStatus) } closeRide(){ if(this.#currentRide.getStatus!=="CREATED"){ console.log("Ride wasn't in progress. Can't close ride"); return 0; } this.#currentRide.setStatus=("COMPLETED"); this.#completedRides.push(this.#currentRide); return this.#currentRide.calculateFare( this.#completedRides.length>=10); } } class Driver extends Person{ } const rider =new Rider("Aman"); const driver= new Driver("Hari"); rider.createRide(1,50,60,1); console.log(rider.closeRide()); rider.updateRide(1,50,90,2); console.log("***************************************************"); rider.createRide(1,50,60,1); rider.withdrawRide(1); rider.updateRide(1,50,60,2); console.log(rider.closeRide()); console.log("***************************************************"); rider.createRide(1,50,60,1); rider.updateRide(1,50,90,2); console.log(rider.closeRide());
Editor Settings
Theme
Key bindings
Full width
Lines