import { injectable } from 'inversify'; import { WorkCharacter } from '../../../entities/library/work-character'; import { World } from '../../../entities/library/world'; import { WorldCharacter } from '../../../entities/library/world-character'; import { WorldCharacterName } from '../../../entities/library/world-character-name'; import { getDeserializedEntitiesPromise } from '../get-deserialized'; import { serializeEntitiesPromise } from '../serialize-entity-promise'; import { Serializer } from '../serializer'; @injectable() export class WorldCharacterSerializer extends Serializer< WorldCharacterEntityInterface, WorldCharacterSerializedInterface > { public async serialize(entity: WorldCharacterEntityInterface): Promise { const [names, children, parents, workCharacters, worlds] = await Promise.all([ serializeEntitiesPromise(entity.names), serializeEntitiesPromise(entity.children), serializeEntitiesPromise(entity.parents), serializeEntitiesPromise(entity.workCharacters), serializeEntitiesPromise(entity.worlds), ]); return { id: entity.id, nameCanonical: entity.nameCanonical, names, children, parents, workCharacters, worlds, }; } public deserialize(partial: Partial): Partial { return { ...(partial.id ? { id: partial.id } : {}), ...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}), ...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, WorldCharacterName) } : {}), ...(partial.children ? { children: getDeserializedEntitiesPromise(partial.children, WorldCharacter) } : {}), ...(partial.parents ? { parents: getDeserializedEntitiesPromise(partial.parents, WorldCharacter) } : {}), ...(partial.workCharacters ? { workCharacters: getDeserializedEntitiesPromise(partial.workCharacters, WorkCharacter) } : {}), ...(partial.worlds ? { worlds: getDeserializedEntitiesPromise(partial.worlds, World) } : {}), }; } }