import JourneyAdapterInterface from './JourneyAdapterInterface'; import JourneyStopAdapterInterface from '../../JourneyStop/adapter/JourneyStopAdapterInterface'; import Journey from '../entity/Journey'; import RouteClientInterface from '../../Route/clients/RouteClientInterface'; import JourneyStop from '../../JourneyStop/entity/JourneyStop'; import JourneyVehicleAdapterInterface from '../../JourneyVehicle/adapter/JourneyVehicleAdapterInterface'; import JourneyVehicleStop from '../../JourneyVehicleStop/entity/JourneyVehicleStop'; import JourneyMessagingSelectableUsers from '../enums/JourneyMessagingSelectableUsers'; import JourneyMessagingSelectableMessageType from '../enums/JourneyMessagingSelectableMessageType'; import JourneyVehicle from '../../JourneyVehicle/entity/JourneyVehicle'; export default class JourneyAdapter implements JourneyAdapterInterface { journeyStopAdapter: JourneyStopAdapterInterface; routeClient: RouteClientInterface; journeyVehicleAdapter: JourneyVehicleAdapterInterface; constructor(journeyStopAdapter: JourneyStopAdapterInterface, routeClient: RouteClientInterface, journeyVehicleAdapter: JourneyVehicleAdapterInterface) { this.journeyStopAdapter = journeyStopAdapter; this.routeClient = routeClient; this.journeyVehicleAdapter = journeyVehicleAdapter; } private getJourneyStopsFromJSONJourney(json) { return (json.stops || json.journey_stops || []); } adapt(json: any, instance: Journey): Journey { if(json.id || json.journey_id) { instance.id = json.journey_id || json.id; instance.name = json.name || json.journey_name || json.journey_group_name; instance.product_name = json.product_name; // instance.product_id = json.product_id; instance.route_id = json.route_id; instance.type = json.journey_type; instance.arrival_date = ((instance.type === 'OUTBOUND') && json.journey_stops.length !== 0) ? json.journey_stops[json.journey_stops.length - 1].arrival_datetime.datetime : void 0; instance.departure_date = ((instance.type === 'RETURN') && json.journey_stops.length !== 0) ? json.journey_stops[0].departure_datetime.datetime : void 0; instance.seats_on_sale = json.seats_on_sale ; instance.stops = this.getJourneyStopsFromJSONJourney(json).map((each: JourneyStop) => this.journeyStopAdapter.transformToEntity(each)); instance.journey_vehicles = (json.journey_vehicles || []).map((each: JourneyVehicle) => this.journeyVehicleAdapter.transformToEntity(each)); instance.journey_vehicles = instance.journey_vehicles.map((eachJourneyVehicle: JourneyVehicle) => { eachJourneyVehicle.journey_vehicle_stops = eachJourneyVehicle.journey_vehicle_stops.map((eachJourneyVehicleStop: JourneyVehicleStop) => { let found = null; (json.journey_vehicles || []).find((eachVehicle: any) => { found = eachVehicle.stops.find((each__unprocessed__JourneyVehicleStop: any) => { return each__unprocessed__JourneyVehicleStop.id === eachJourneyVehicleStop.id; }); return found; }); const stop = instance.stops.find((each: any) => { return each.id === found.journey_stop_id; }); eachJourneyVehicleStop.journey_stop = stop; return eachJourneyVehicleStop; }); return eachJourneyVehicle; }); return instance; } else { return json } } prepare(instance: Journey): any { let object = { id: instance.id, journey_id: instance.id, name: instance.name, // product_id: instance.product_id || void 0, route_id: instance.route ? instance.route.id : instance.route_id, departure_datetime: instance.departure_date, arrival_datetime: instance.arrival_date, // is_outbound_of: '', // Set in the parent call // is_return_of: '', // Set in the parent call type: instance.type, // created_from_route: instance.route.id, seats_on_sale: instance.seats_on_sale, stops: instance.stops.map((each: JourneyStop) => this.journeyStopAdapter.transformToPayload(each)), journey_vehicles: instance.journey_vehicles.map((each: JourneyVehicle) => this.journeyVehicleAdapter.transformToPayload(each)), }; return object; } transformToEntity(json: any): Journey { return this.adapt(json, new Journey()); } transformToPayload(instance: Journey): any { return this.prepare(instance); } prepareSendNotificationPayload(journey: string, target: JourneyMessagingSelectableUsers, message_type: JourneyMessagingSelectableMessageType, vehicles: Array, stops: Array, message: string, subject: string): any { return { journey_id: journey, user_type: target, message_type: message_type, vehicles: vehicles, stops: stops, message: message, subject: subject, } } prepareUpdateVehicles(id: string, vehicles: Array): any { let object = { journey_id: id, journey_vehicles: vehicles.map((each: JourneyVehicle) => this.journeyVehicleAdapter.transformToPayload(each)), }; let tr = []; tr.push(object) return tr ; } }