83 lines
3.4 KiB
TypeScript
83 lines
3.4 KiB
TypeScript
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<WorkEntityInterface, WorkSerializedInterface> {
|
|
public async serialize(entity: WorkEntityInterface): Promise<WorkSerializedInterface> {
|
|
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<WorkSerializedInterface>): Partial<WorkEntityInterface> {
|
|
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) } : {}),
|
|
};
|
|
}
|
|
}
|