54 lines
2.4 KiB
TypeScript
54 lines
2.4 KiB
TypeScript
import { injectable } from 'inversify';
|
|
import { CharacterTag } from '../../../entities/library/character-tag';
|
|
import { InteractionTag } from '../../../entities/library/interaction-tag';
|
|
import { Tag } from '../../../entities/library/tag';
|
|
import { TagName } from '../../../entities/library/tag-name';
|
|
import { WorkTag } from '../../../entities/library/work-tag';
|
|
import { getDeserializedEntitiesPromise } from '../get-deserialized';
|
|
import { serializeEntitiesPromise } from '../serialize-entity-promise';
|
|
import { Serializer } from '../serializer';
|
|
|
|
@injectable()
|
|
export class TagSerializer extends Serializer<TagEntityInterface, TagSerializedInterface> {
|
|
public async serialize(entity: TagEntityInterface): Promise<TagSerializedInterface> {
|
|
const [names, characterTags, children, parents, interactionTags, workTags] = await Promise.all([
|
|
serializeEntitiesPromise(entity.names),
|
|
serializeEntitiesPromise(entity.characterTags),
|
|
serializeEntitiesPromise(entity.children),
|
|
serializeEntitiesPromise(entity.parents),
|
|
serializeEntitiesPromise(entity.interactionTags),
|
|
serializeEntitiesPromise(entity.workTags),
|
|
]);
|
|
|
|
return {
|
|
id: entity.id,
|
|
nameCanonical: entity.nameCanonical,
|
|
description: entity.description,
|
|
names,
|
|
characterTags,
|
|
children,
|
|
parents,
|
|
interactionTags,
|
|
workTags,
|
|
};
|
|
}
|
|
|
|
public deserialize(partial: Partial<TagSerializedInterface>): Partial<TagEntityInterface> {
|
|
return {
|
|
...(partial.id ? { id: partial.id } : {}),
|
|
...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}),
|
|
...(partial.description ? { description: partial.description } : {}),
|
|
...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, TagName) } : {}),
|
|
...(partial.children ? { children: getDeserializedEntitiesPromise(partial.children, Tag) } : {}),
|
|
...(partial.parents ? { parents: getDeserializedEntitiesPromise(partial.parents, Tag) } : {}),
|
|
...(partial.workTags ? { workTags: getDeserializedEntitiesPromise(partial.workTags, WorkTag) } : {}),
|
|
...(partial.interactionTags
|
|
? { interactionTags: getDeserializedEntitiesPromise(partial.interactionTags, InteractionTag) }
|
|
: {}),
|
|
...(partial.characterTags
|
|
? { characterTags: getDeserializedEntitiesPromise(partial.characterTags, CharacterTag) }
|
|
: {}),
|
|
};
|
|
}
|
|
}
|