import { injectable } from 'inversify'; import { Copy } from '../../../entities/library/copy'; import { Site } from '../../../entities/library/site'; import { getDeserializedEntitiesPromise, getDeserializedEntityPromise } from '../get-deserialized'; import { serializeEntitiesPromise, serializeEntityPromise } from '../serialize-entity-promise'; import { Serializer } from '../serializer'; injectable(); export class SourceSerializer extends Serializer { public async serialize(entity: SourceEntityInterface): Promise { const [copies, site] = await Promise.all([ serializeEntitiesPromise(entity.copies), serializeEntityPromise(entity.site), ]); return { id: entity.id, uri: entity.uri, copies, site, }; } public deserialize(partial: Partial): Partial { return { ...(partial.id ? { id: partial.id } : {}), ...(partial.uri ? { uri: partial.uri } : {}), ...(partial.site ? { site: getDeserializedEntityPromise(partial.site, Site) } : {}), ...(partial.copies ? { copies: getDeserializedEntitiesPromise(partial.copies, Copy) } : {}), }; } }