import Page from '../entity/Page'; import SeoFields from '../../SEO/entity/SeoFields'; import PageStatus from '../enums/PageStatus'; import PageAdapterInterface from './PageAdapterInterface'; import PerkAdapterInterface from '../../Perk/adapter/PerkAdapterInterface'; import SeoFieldsAdapterInterface from '../../SEO/adapter/SeoFieldsAdapterInterface'; import FileFactoryInterface from '../../File/factories/FileFactoryInterface'; export default abstract class PageAdapter implements PageAdapterInterface { protected imageAdapter: FileFactoryInterface; protected perkAdapter: PerkAdapterInterface; protected seoAdapter: SeoFieldsAdapterInterface; constructor( imageAdapter: FileFactoryInterface, perkAdapter: PerkAdapterInterface, seoAdapter: SeoFieldsAdapterInterface, ) { this.imageAdapter = imageAdapter; this.perkAdapter = perkAdapter; this.seoAdapter = seoAdapter; } adapt(json: any, instance: Page): Page { instance.id = json.id; instance.title = json.title; instance.description = json.description; instance.slug = json.slug; instance.images = (json.cover_images || []).map(each => this.imageAdapter.transformToEntity(each)); instance.thumbnails = (json.thumbnails || []).map(each => this.imageAdapter.transformToEntity(each)); instance.perks = (json.perks || []).map(each => this.perkAdapter.transformToEntity(each)); instance.about_text = json.about; instance.about_images = (json.images || []).map(each => this.imageAdapter.transformToEntity(each)); const seo_json = { title: json.seo_title, description: json.meta_description, keywords: json.keywords, images: json.graph_images, }; instance.seo = this.seoAdapter.adapt(seo_json, new SeoFields()); instance.status = json.status || PageStatus.pageStatusPublished; return instance; } prepare(instance: Page): any { let object = { id: instance.id, title: instance.title, description: instance.description, slug: instance.slug, perks: instance.perks.map(each => this.perkAdapter.prepare(each)), about: instance.about_text, //seo: this.seoAdapter.prepare(instance.seo), status: instance.status, }; const perks_adapted = instance.perks.map(each => this.perkAdapter.prepare(each)); const keywords_adapted = instance.seo.keywords.join(','); // Not using the due to the images are already created and we only need the const about_images = instance.about_images.map(each => each.id); const images_adapted = instance.images.map(each => each.id); const thumbnails_adapted = instance.thumbnails.map(each => each.id); const seo_images = instance.seo.images.map(each => each.id); return { ...object, images: about_images, seo_title: instance.seo.title, meta_description: instance.seo.description, cover_images: images_adapted, thumbnails: thumbnails_adapted, perks: perks_adapted, graph_images: seo_images, keywords: keywords_adapted, }; } }