import Page from "../entity/Page"; import PageType from "../enums/PageType"; import EventProductAdapterInterface from "../../EventProduct/adapter/EventProductAdapterInterface"; import EventProduct from "../../EventProduct/entity/EventProduct"; import NoTransformerSupportedException from "../../common/exceptions/NoTransformerSupportedException"; import TagAdapterInterface from "../../Tag/adapter/TagAdapterInterface"; import Tag from "../../Tag/entity/Tag"; import PageFactoryInterface from "./PageFactoryInterface"; import PrivateProductAdapterInterface from "../../PrivateProduct/adapter/PrivateProductAdapterInterface"; import PrivateProduct from "../../PrivateProduct/entity/PrivateProduct"; export default class PageFactory implements PageFactoryInterface { private tagAdapter: TagAdapterInterface; private eventProductAdapter: EventProductAdapterInterface; private privateProductAdapter: PrivateProductAdapterInterface; constructor( tagAdapter: TagAdapterInterface, eventProductAdapter: EventProductAdapterInterface, privateProductAdapter: PrivateProductAdapterInterface ) { this.tagAdapter = tagAdapter; this.eventProductAdapter = eventProductAdapter; this.privateProductAdapter = privateProductAdapter; } transformToEntity(json: any): Page { switch (json.page_type) { case PageType.tag: return this.tagAdapter.adapt(json, new Tag()); case PageType.event: return this.eventProductAdapter.adapt(json, new EventProduct()); case PageType.private: return this.privateProductAdapter.adapt(json, new PrivateProduct()); } throw new NoTransformerSupportedException(); } transformToPayload(instance: Page): any { switch (true) { case instance instanceof Tag: return this.tagAdapter.prepare(instance); case instance instanceof EventProduct: return this.eventProductAdapter.prepare(instance); case instance instanceof PrivateProduct: return this.privateProductAdapter.prepare(instance); } throw new NoTransformerSupportedException(); } }