import TravelProduct from '../entity/TravelProduct'; import ProductAdapter from '../../Product/adapter/ProductAdapter'; import TravelProductAdapterInterface from './TravelProductAdapterInterface'; import FileFactoryInterface from '../../File/factories/FileFactoryInterface'; import PerkAdapterInterface from '../../Perk/adapter/PerkAdapterInterface'; import SeoFieldsAdapterInterface from '../../SEO/adapter/SeoFieldsAdapterInterface'; import JourneyGroupAdapterInterface from '../../JourneyGroup/adapter/JourneyGroupAdapterInterface'; import TagAdapterInterface from '../../Tag/adapter/TagAdapterInterface'; import ConcessionAdapterInterface from '../../Concession/adapter/ConcessionAdapterInterface'; export default class TravelProductAdapter extends ProductAdapter implements TravelProductAdapterInterface { protected journeyGroupAdapter: JourneyGroupAdapterInterface; protected concessionAdapter: ConcessionAdapterInterface; constructor( imageAdapter: FileFactoryInterface, perkAdapter: PerkAdapterInterface, seoAdapter: SeoFieldsAdapterInterface, tagAdapter: TagAdapterInterface, journeyGroupAdapter: JourneyGroupAdapterInterface, concessionAdapter: ConcessionAdapterInterface, ) { super(imageAdapter, perkAdapter, seoAdapter, tagAdapter); this.journeyGroupAdapter = journeyGroupAdapter; this.concessionAdapter = concessionAdapter; } adapt(json: any, instance: TravelProduct): TravelProduct { let instanceAdapted = super.adapt(json, instance); instanceAdapted.seats_on_sale = json.outbound_seats_for_sale; instanceAdapted.journey_groups = (json.journey_groups || []).map(each => this.journeyGroupAdapter.transformToEntity(each)); instanceAdapted.concessions = (json.concessions || []).map(each => this.concessionAdapter.transformToEntity(each)); return instanceAdapted; } prepare(instance: TravelProduct): any { let instancePrepared = super.prepare(instance); let object = { ...instancePrepared, journey_groups: instance.journey_groups.map(each => this.journeyGroupAdapter.prepare(each)), concessions: instance.concessions ? instance.concessions.map(each => this.concessionAdapter.prepare(each)) : void 0, outbound_seats_for_sale: instance.seats_on_sale, return_seats_for_sale: instance.seats_on_sale, }; return object; } transformToEntity(json: any): TravelProduct { return this.adapt(json, new TravelProduct()); } transformToPayload(instance: TravelProduct): any { return this.prepare(instance); } }