59 lines
2.5 KiB
TypeScript
59 lines
2.5 KiB
TypeScript
import { injectable } from 'inversify';
|
|
import { CharacterTag } from '../../../entities/library/character-tag';
|
|
import { InteractionTag } from '../../../entities/library/interaction-tag';
|
|
import { Work } from '../../../entities/library/work';
|
|
import { WorkCharacterName } from '../../../entities/library/work-character-name';
|
|
import { WorldCharacter } from '../../../entities/library/world-character';
|
|
import { getDeserializedEntitiesPromise } from '../get-deserialized';
|
|
import { serializeEntitiesPromise } from '../serialize-entity-promise';
|
|
import { Serializer } from '../serializer';
|
|
|
|
@injectable()
|
|
export class WorkCharacterSerializer extends Serializer<
|
|
WorkCharacterEntityInterface,
|
|
WorkCharacterSerializedInterface
|
|
> {
|
|
public async serialize(entity: WorkCharacterEntityInterface): Promise<WorkCharacterSerializedInterface> {
|
|
const [names, characterTags, interactedBy, works, interactWith, worldCharacters] = await Promise.all([
|
|
serializeEntitiesPromise(entity.names),
|
|
serializeEntitiesPromise(entity.characterTags),
|
|
serializeEntitiesPromise(entity.interactedBy),
|
|
serializeEntitiesPromise(entity.works),
|
|
serializeEntitiesPromise(entity.interactWith),
|
|
serializeEntitiesPromise(entity.worldCharacters),
|
|
]);
|
|
|
|
return {
|
|
id: entity.id,
|
|
nameCanonical: entity.nameCanonical,
|
|
names,
|
|
characterTags,
|
|
interactedBy,
|
|
works,
|
|
interactWith,
|
|
worldCharacters,
|
|
};
|
|
}
|
|
|
|
public deserialize(partial: Partial<WorkCharacterSerializedInterface>): Partial<WorkCharacterEntityInterface> {
|
|
return {
|
|
...(partial.id ? { id: partial.id } : {}),
|
|
...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}),
|
|
...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, WorkCharacterName) } : {}),
|
|
...(partial.works ? { works: getDeserializedEntitiesPromise(partial.works, Work) } : {}),
|
|
...(partial.characterTags
|
|
? { characterTags: getDeserializedEntitiesPromise(partial.characterTags, CharacterTag) }
|
|
: {}),
|
|
...(partial.worldCharacters
|
|
? { worldCharacters: getDeserializedEntitiesPromise(partial.worldCharacters, WorldCharacter) }
|
|
: {}),
|
|
...(partial.interactedBy
|
|
? { interactedBy: getDeserializedEntitiesPromise(partial.interactedBy, InteractionTag) }
|
|
: {}),
|
|
...(partial.interactWith
|
|
? { interactWith: getDeserializedEntitiesPromise(partial.interactWith, InteractionTag) }
|
|
: {}),
|
|
};
|
|
}
|
|
}
|