RenaiApp/src/main/modules/serialization/serializers/work-author-serializer.ts

37 lines
1.5 KiB
TypeScript

import { injectable } from 'inversify';
import { Author } from '../../../entities/library/author';
import { AuthorRole } from '../../../entities/library/author-role';
import { Work } from '../../../entities/library/work';
import { getDeserializedEntitiesPromise, getDeserializedEntityPromise } from '../get-deserialized';
import { serializeEntitiesPromise, serializeEntityPromise } from '../serialize-entity-promise';
import { Serializer } from '../serializer';
@injectable()
export class WorkAuthorSerializer extends Serializer<WorkAuthorEntityInterface, WorkAuthorSerializedInterface> {
public async serialize(entity: WorkAuthorEntityInterface): Promise<WorkAuthorSerializedInterface> {
const [author, work, authorRoles] = await Promise.all([
serializeEntityPromise(entity.author),
serializeEntityPromise(entity.work),
serializeEntitiesPromise(entity.authorRoles),
]);
return {
id: entity.id,
order: entity.order,
author,
work,
authorRoles,
};
}
public deserialize(partial: Partial<WorkAuthorSerializedInterface>): Partial<WorkAuthorEntityInterface> {
return {
...(partial.id ? { id: partial.id } : {}),
...(partial.work ? { order: partial.work } : {}),
...(partial.work ? { work: getDeserializedEntityPromise(partial.work, Work) } : {}),
...(partial.author ? { author: getDeserializedEntityPromise(partial.author, Author) } : {}),
...(partial.authorRoles ? { authorRoles: getDeserializedEntitiesPromise(partial.authorRoles, AuthorRole) } : {}),
};
}
}