import PageAdapter from '../../Page/adapter/PageAdapter'; import Product from '../entity/Product'; import Tag from '../../Tag/entity/Tag'; import ProductAdapterInterface from './ProductAdapterInterface'; import FileFactoryInterface from '../../File/factories/FileFactoryInterface'; import TagAdapterInterface from '../../Tag/adapter/TagAdapterInterface'; import PerkAdapterInterface from '../../Perk/adapter/PerkAdapterInterface'; import SeoFieldsAdapterInterface from '../../SEO/adapter/SeoFieldsAdapterInterface'; export default abstract class ProductAdapter extends PageAdapter implements ProductAdapterInterface { protected tagAdapter: TagAdapterInterface; constructor( imageAdapter: FileFactoryInterface, perkAdapter: PerkAdapterInterface, seoAdapter: SeoFieldsAdapterInterface, tagAdapter: TagAdapterInterface, ) { super(imageAdapter, perkAdapter, seoAdapter); this.tagAdapter = tagAdapter; } adapt(json: any, instance: Product) { let instanceAdapted = super.adapt(json, instance); instanceAdapted.tags = json.tags.map(each => this.tagAdapter.adapt(each, new Tag())); return instanceAdapted; } prepare(instance: Product): any { let instancePrepared = super.prepare(instance); let object = { ...instancePrepared, // Not using the TagAdapter because it prepares the whole entity // and we need only an array of when creating/editing a Product tags: instance.tags.map(each => each.id), }; return object; } }