import JourneyGroupServiceInterface from './JourneyGroupServiceInterface'; import JourneyGroup from '../entity/JourneyGroup'; import BaseEntityService from '../../common/services/BaseEntityService/BaseEntityService'; import JourneyGroupClientInterface from '../clients/JourneyGroupClientInterface'; import JourneyGroupAdapterInterface from '../adapter/JourneyGroupAdapterInterface'; import RequestPromise from '../../common/DTO/RequestPromise'; import HTTPRequest from '../../Request/entity/HTTPRequest'; import JourneyServiceInterface from '../../Journey/services/JourneyServiceInterface'; export default class JourneyGroupService extends BaseEntityService implements JourneyGroupServiceInterface { protected client: JourneyGroupClientInterface; protected transformer: JourneyGroupAdapterInterface; journeyService: JourneyServiceInterface; constructor(client: JourneyGroupClientInterface, transformer: JourneyGroupAdapterInterface, journeyService: JourneyServiceInterface) { super(client, transformer); this.journeyService = journeyService; } protected adaptPagination(responseFromAPI: any): object { const { data: dataToAdapt, ...paginationInfo } = responseFromAPI; return { paginationInfo, data: dataToAdapt.map(each => this.transformer.transformGetByTravelProductId(each)), }; } getByTravelProductId(travel_product_id: string): RequestPromise { const httpRequest = new HTTPRequest(); httpRequest.data = { ...httpRequest.data, travel_product_id, }; const requestPromise = this.client.getByTravelProductId(httpRequest); return new RequestPromise( requestPromise.requestId, new Promise((resolve, reject) => { requestPromise.promise.then((response: any) => { try { resolve( this.adaptPagination(response.data), ); } catch (e) { reject(e); } }) }), ); } getFull(journey_group_id: string): RequestPromise { const promise = this.getById(journey_group_id).promise; return new RequestPromise(promise.requestId, new Promise(async (resolve, reject) => { const journeyGroup = await promise; const journeys = await Promise.all(journeyGroup.journeys.map(each => { return this.journeyService.getById(each).promise; })); journeyGroup.journeys = journeys; resolve(journeyGroup); })); /* return new RequestPromise(requestPromise.requestId, new Promise((resolve, reject) => { requestPromise.promise.then(jg => { journeyGroup = jg; Promise.all(jg.journeys.map(each => { return this.journeyService.getById(each).promise; })).then(js => { journeyGroup.journeys = js; resolve(journeyGroup); }) }); }));*/ } }