33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
import { injectable } from 'inversify';
|
|
import { Copy } from '../../../entities/library/copy';
|
|
import { Site } from '../../../entities/library/site';
|
|
import { getDeserializedEntitiesPromise, getDeserializedEntityPromise } from '../get-deserialized';
|
|
import { serializeEntitiesPromise, serializeEntityPromise } from '../serialize-entity-promise';
|
|
import { Serializer } from '../serializer';
|
|
|
|
injectable();
|
|
export class SourceSerializer extends Serializer<SourceEntityInterface, SourceSerializedInterface> {
|
|
public async serialize(entity: SourceEntityInterface): Promise<SourceSerializedInterface> {
|
|
const [copies, site] = await Promise.all([
|
|
serializeEntitiesPromise(entity.copies),
|
|
serializeEntityPromise(entity.site),
|
|
]);
|
|
|
|
return {
|
|
id: entity.id,
|
|
uri: entity.uri,
|
|
copies,
|
|
site,
|
|
};
|
|
}
|
|
|
|
public deserialize(partial: Partial<SourceSerializedInterface>): Partial<SourceEntityInterface> {
|
|
return {
|
|
...(partial.id ? { id: partial.id } : {}),
|
|
...(partial.uri ? { uri: partial.uri } : {}),
|
|
...(partial.site ? { site: getDeserializedEntityPromise(partial.site, Site) } : {}),
|
|
...(partial.copies ? { copies: getDeserializedEntitiesPromise(partial.copies, Copy) } : {}),
|
|
};
|
|
}
|
|
}
|