43 lines
1.6 KiB
TypeScript
43 lines
1.6 KiB
TypeScript
import { injectable } from 'inversify';
|
|
import { Tag } from '../../../entities/library/tag';
|
|
import { WorkCharacter } from '../../../entities/library/work-character';
|
|
import { getDeserializedEntitiesPromise, getDeserializedEntityPromise } from '../get-deserialized';
|
|
import { serializeEntitiesPromise, serializeEntityPromise } from '../serialize-entity-promise';
|
|
import { Serializer } from '../serializer';
|
|
|
|
injectable();
|
|
export class InteractionTagSerializer extends Serializer<
|
|
InteractionTagEntityInterface,
|
|
InteractionTagSerializedInterface
|
|
> {
|
|
public async serialize(entity: InteractionTagEntityInterface): Promise<InteractionTagSerializedInterface> {
|
|
const [tag, objectCharacters, subjectCharacters] = await Promise.all([
|
|
serializeEntityPromise(entity.tag),
|
|
serializeEntitiesPromise(entity.objectCharacters),
|
|
serializeEntitiesPromise(entity.subjectCharacters),
|
|
]);
|
|
|
|
return {
|
|
id: entity.id,
|
|
weight: entity.weight,
|
|
tag,
|
|
objectCharacters,
|
|
subjectCharacters,
|
|
};
|
|
}
|
|
|
|
public deserialize(partial: Partial<InteractionTagSerializedInterface>): Partial<InteractionTagEntityInterface> {
|
|
return {
|
|
...(partial.id ? { id: partial.id } : {}),
|
|
...(partial.weight ? { weight: partial.weight } : {}),
|
|
...(partial.tag ? { tag: getDeserializedEntityPromise(partial.tag, Tag) } : {}),
|
|
...(partial.objectCharacters
|
|
? { objectCharacters: getDeserializedEntitiesPromise(partial.objectCharacters, WorkCharacter) }
|
|
: {}),
|
|
...(partial.subjectCharacters
|
|
? { subjectCharacters: getDeserializedEntitiesPromise(partial.subjectCharacters, WorkCharacter) }
|
|
: {}),
|
|
};
|
|
}
|
|
}
|