eust-conciliation
Version:
59 lines (52 loc) • 1.85 kB
text/typescript
import { DeepPartial, EntityTarget, FindOptionsOrder } from 'typeorm';
import { Injectable } from '@severo-tech/injection-decorator';
import { BaseDBRepository } from '../db/base-db-repository';
import { EustIssueEntity } from '../db/entities';
import { IEustIssueRepository } from '../../application/contracts';
import { EustIssue, EustIssueType, EustIssueUnit } from '../../domain/eust-issue';
()
export class EustIssueRepository extends BaseDBRepository<EustIssueEntity, EustIssue> implements IEustIssueRepository {
protected entityClass: EntityTarget<EustIssueEntity> = EustIssueEntity;
protected defaultOrderBy: FindOptionsOrder<EustIssueEntity> = {
created_at: 'DESC',
};
protected toModel(entity: EustIssueEntity): EustIssue {
let causedBy: any | undefined;
try {
causedBy = JSON.parse(entity.causedBy);
} catch (error) {
// Skipping parse error...
}
return {
id: entity.id,
unit: entity.unit as EustIssueUnit,
type: entity.type as EustIssueType,
debitIds: entity.debits?.map((el): string => el.id) ?? [],
invoiceId: entity.invoiceId,
description: entity.description,
causedBy,
resolved: entity.resolved,
createdAt: entity.created_at,
updatedAt: entity.updated_at,
};
}
protected fromModel(model: Partial<EustIssue>): DeepPartial<EustIssueEntity> {
let causedBy: string | undefined;
try {
causedBy = JSON.stringify(model.causedBy);
} catch (error) {
// Skipping stringify error...
}
return {
id: model.id,
unit: model.unit,
type: model.type,
debits: model.debitIds?.map((id: string) => ({ id })),
// @ts-ignore - Null value
invoiceId: model.invoiceId,
description: model.description,
causedBy,
resolved: model.resolved,
};
}
}