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 { public async serialize(entity: WorkAuthorEntityInterface): Promise { 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): Partial { 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) } : {}), }; } }