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

35 lines
1.5 KiB
TypeScript

import { injectable } from 'inversify';
import { AuthorRoleName } from '../../../entities/library/author-role-name';
import { WorkAuthor } from '../../../entities/library/work-author';
import { getDeserializedEntitiesPromise } from '../get-deserialized';
import { serializeEntitiesPromise } from '../serialize-entity-promise';
import { Serializer } from '../serializer';
@injectable()
export class AuthorRoleSerializer extends Serializer<AuthorRoleEntityInterface, AuthorRoleSerializedInterface> {
public async serialize(entity: AuthorRoleEntityInterface): Promise<AuthorRoleSerializedInterface> {
const [names, workAuthors] = await Promise.all([
serializeEntitiesPromise(entity.names),
serializeEntitiesPromise(entity.workAuthors),
]);
return {
id: entity.id,
nameCanonical: entity.nameCanonical,
description: entity.description,
names,
workAuthors,
};
}
public deserialize(partial: Partial<AuthorRoleSerializedInterface>): Partial<AuthorRoleEntityInterface> {
return {
...(partial.id ? { id: partial.id } : {}),
...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}),
...(partial.description ? { description: partial.description } : {}),
...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, AuthorRoleName) } : {}),
...(partial.workAuthors ? { workAuthors: getDeserializedEntitiesPromise(partial.workAuthors, WorkAuthor) } : {}),
};
}
}