import { injectable } from 'inversify'; import { SiteName } from '../../../entities/library/site-name'; import { Source } from '../../../entities/library/source'; import { getDeserializedEntitiesPromise } from '../get-deserialized'; import { serializeEntitiesPromise } from '../serialize-entity-promise'; import { Serializer } from '../serializer'; @injectable() export class SiteSerializer extends Serializer { public async serialize(entity: SiteEntityInterface): Promise { const [names, sources] = await Promise.all([ serializeEntitiesPromise(entity.names), serializeEntitiesPromise(entity.sources), ]); return { id: entity.id, nameCanonical: entity.nameCanonical, names, sources, }; } public deserialize(partial: Partial): Partial { return { ...(partial.id ? { id: partial.id } : {}), ...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}), ...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, SiteName) } : {}), ...(partial.sources ? { sources: getDeserializedEntitiesPromise(partial.sources, Source) } : {}), }; } }