import PrivateProductAdapterInterface from './PrivateProductAdapterInterface'; import PrivateProduct from '../entity/PrivateProduct'; import UserAdapterInterface from '../../User/adapter/UserAdapterInterface'; import PaymentAdapterInterface from '../../Payment/adapter/PaymentAdapterInterface'; import TravelProductAdapter from '../../TravelProduct/adapter/TravelProductAdapter'; import TagAdapterInterface from '../../Tag/adapter/TagAdapterInterface'; 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 ConcessionAdapterInterface from '../../Concession/adapter/ConcessionAdapterInterface'; import Money from '../../common/entities/Money'; import Currency from '../../common/entities/Currency'; export default class PrivateProductAdapter extends TravelProductAdapter implements PrivateProductAdapterInterface { private paymentAdapter: PaymentAdapterInterface; private userAdapter: UserAdapterInterface; constructor( imageAdapter: FileFactoryInterface, perkAdapter: PerkAdapterInterface, seoAdapter: SeoFieldsAdapterInterface, tagAdapter: TagAdapterInterface, journeyGroupAdapter: JourneyGroupAdapterInterface, concessionAdapter: ConcessionAdapterInterface, userAdapter: UserAdapterInterface, paymentAdapter: PaymentAdapterInterface) { super(imageAdapter, perkAdapter, seoAdapter, tagAdapter, journeyGroupAdapter, concessionAdapter); this.userAdapter = userAdapter; this.paymentAdapter = paymentAdapter; } adapt(json: any, instance: PrivateProduct): PrivateProduct { instance.id = json.id; instance.lead_passenger = json.lead_passenger; instance.price = json.price; instance.per_seat_price = new Money(new Currency('GBP', 'L', 0), 0); instance.per_seat_price.amount = json.price.amount / (instance.seats_on_sale || json.outbound_seats_for_sale); instance.payment_limit_date = json.payment_limit_date; instance.payments = (json.payments || []).map(each => this.paymentAdapter.transformToEntity(each)); instance.slug = json.slug; instance.title = json.title; instance.outbound_seats_for_sale = json.outbound_seats_for_sale; instance.outbound_seats_bought = json.outbound_seats_bought; instance.return_seats_for_sale = json.return_seats_for_sale; instance.return_seats_bought = json.return_seats_bought; instance.allow_book_once_paid = json.allow_book_once_paid; instance.journey_groups = (json.journey_groups || []).map(each => this.journeyGroupAdapter.transformToEntity(each)); instance.seats_on_sale = instance.seats_on_sale || json.outbound_seats_for_sale; instance.concessions = (json.concessions || []).map(each => this.concessionAdapter.transformToEntity(each)); return instance; } prepare(instance: PrivateProduct): any { let object = { // ...instancePrepared, // event_from_date: instance.from_date, // event_to_date: instance.to_date, id: instance.id, title: instance.title, slug: instance.slug, outbound_seats_for_sale: instance.seats_on_sale, return_seats_for_sale: instance.seats_on_sale, lead_passenger: instance.lead_passenger, lead_passenger_id: instance.lead_passenger.id, price: instance.price.amount, per_seat_price: instance.per_seat_price, journey_groups: instance.journey_groups.map(each => this.journeyGroupAdapter.transformToPayload(each)), // lead_passenger: this.userAdapter.transformToPayload(instance.lead_passenger), payment_limit_date: instance.payment_limit_date, allow_book_once_paid: instance.allow_book_once_paid, seats_on_sale: instance.seats_on_sale, concessions: instance.concessions || [], }; return object; } transformToEntity(json: any): PrivateProduct { return this.adapt(json, new PrivateProduct()); } transformToPayload(instance: PrivateProduct): any { return this.prepare(instance); } }