import { injectable } from 'inversify'; import { Copy } from '../../../entities/library/copy'; import { Transformation } from '../../../entities/library/transformation'; import { WorkAuthor } from '../../../entities/library/work-author'; import { WorkCharacter } from '../../../entities/library/work-character'; import { WorkName } from '../../../entities/library/work-name'; import { WorkTag } from '../../../entities/library/work-tag'; import { World } from '../../../entities/library/world'; import { getDeserializedEntitiesPromise } from '../get-deserialized'; import { serializeEntitiesPromise } from '../serialize-entity-promise.js'; import { Serializer } from '../serializer.js'; @injectable() export class WorkSerializer extends Serializer { public async serialize(entity: WorkEntityInterface): Promise { const [ languages, collectionParts, copies, names, transformationOf, transformedBy, workAuthors, workCharacters, workTags, worlds, ] = await Promise.all([ serializeEntitiesPromise(entity.languages), serializeEntitiesPromise(entity.collectionParts), serializeEntitiesPromise(entity.copies), serializeEntitiesPromise(entity.names), serializeEntitiesPromise(entity.transformationOf), serializeEntitiesPromise(entity.transformedBy), serializeEntitiesPromise(entity.workAuthors), serializeEntitiesPromise(entity.workCharacters), serializeEntitiesPromise(entity.workTags), serializeEntitiesPromise(entity.worlds), ]); return { id: entity.id, isCanonical: entity.isCanonical, nameCanonical: entity.nameCanonical, rating: entity.rating, releaseDate: entity.releaseDate, languages, collectionParts, copies, names, transformationOf, transformedBy, workAuthors, workCharacters, workTags, worlds, }; } public deserialize(partial: Partial): Partial { return { ...(partial.id ? { id: partial.id } : {}), ...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}), ...(partial.rating ? { rating: partial.rating } : {}), ...(partial.releaseDate ? { releaseDate: partial.releaseDate } : {}), ...(partial.isCanonical ? { isCanonical: partial.isCanonical } : {}), ...(partial.copies ? { copies: getDeserializedEntitiesPromise(partial.copies, Copy) } : {}), ...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, WorkName) } : {}), ...(partial.transformationOf ? { transformationOf: getDeserializedEntitiesPromise(partial.transformationOf, Transformation) } : {}), ...(partial.transformedBy ? { transformedBy: getDeserializedEntitiesPromise(partial.transformedBy, Transformation) } : {}), ...(partial.workAuthors ? { workAuthors: getDeserializedEntitiesPromise(partial.workAuthors, WorkAuthor) } : {}), ...(partial.workCharacters ? { workCharacters: getDeserializedEntitiesPromise(partial.workCharacters, WorkCharacter) } : {}), ...(partial.workTags ? { workTags: getDeserializedEntitiesPromise(partial.workTags, WorkTag) } : {}), ...(partial.worlds ? { worlds: getDeserializedEntitiesPromise(partial.worlds, World) } : {}), }; } }