33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
import { injectable } from 'inversify';
|
|
import { AuthorName } from '../../../entities/library/author-name';
|
|
import { WorkAuthor } from '../../../entities/library/work-author';
|
|
import { getDeserializedEntitiesPromise } from '../get-deserialized';
|
|
import { serializeEntitiesPromise } from '../serialize-entity-promise.js';
|
|
import { Serializer } from '../serializer.js';
|
|
|
|
@injectable()
|
|
export class AuthorSerializer extends Serializer<AuthorEntityInterface, AuthorSerializedInterface> {
|
|
public async serialize(entity: AuthorEntityInterface): Promise<AuthorSerializedInterface> {
|
|
const [names, workAuthors] = await Promise.all([
|
|
serializeEntitiesPromise(entity.names),
|
|
serializeEntitiesPromise(entity.workAuthors),
|
|
]);
|
|
|
|
return {
|
|
id: entity.id,
|
|
nameCanonical: entity.nameCanonical,
|
|
names,
|
|
workAuthors,
|
|
};
|
|
}
|
|
|
|
public deserialize(partial: Partial<AuthorSerializedInterface>): Partial<AuthorEntityInterface> {
|
|
return {
|
|
...(partial.id ? { id: partial.id } : {}),
|
|
...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}),
|
|
...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, AuthorName) } : {}),
|
|
...(partial.workAuthors ? { workAuthors: getDeserializedEntitiesPromise(partial.workAuthors, WorkAuthor) } : {}),
|
|
};
|
|
}
|
|
}
|