import RouteAdapterInterface from './RouteAdapterInterface'; import RouteStopAdapter from '../../RouteStop/adapter/RouteStopAdapter'; import Route from '../entity/Route'; import TravelStopPricing from '../../TravelStopPricing/entity/TravelStopPricing'; import RouteStop from '../../RouteStop/entity/RouteStop'; export default class RouteAdapter implements RouteAdapterInterface { protected routeStopAdapter: RouteStopAdapter; constructor(routeStopAdapter: RouteStopAdapter) { this.routeStopAdapter = routeStopAdapter; } adapt(json: any, instance: Route): Route { instance.id = json.id; instance.route_group_id = json.route_group_id; instance.name = json.name; instance.stops = (json.route_stops || []).map(each => this.routeStopAdapter.transformToEntity(each)); instance.number_of_journeys = json.number_of_journeys || 0; instance.number_of_products = json.number_of_products || 0; // return instance; // TODO: adapt travel stop pricing to entity. instance.stops.forEach(eachRouteStop => { const actual_route_stop = json.route_stops.find(e => e.id === eachRouteStop.id); actual_route_stop.prices.forEach(eachPrice => { const pricing = new TravelStopPricing(); pricing.one_leg_price = eachPrice.one_way_price.amount / Math.pow(10, eachPrice.one_way_price.currency_precision); pricing.two_legs_price = eachPrice.return_price.amount / Math.pow(10, eachPrice.return_price.currency_precision); const found_route_stop = instance.stops.find((e: RouteStop) => { return e.stop.id === eachPrice.destination_stop_id; }); pricing.destination_stop = found_route_stop; eachRouteStop.addPricing(pricing); }); }); return instance; } prepare(instance: Route): object { return { id: instance.id, name: instance.name, stops: instance.stops.map(each => this.routeStopAdapter.transformToPayload(each)), }; } transformToEntity(json: any): Route { return this.adapt(json, new Route()); } transformToPayload(instance: Route): any { return this.prepare(instance); } }