UNPKG

eust-conciliation

Version:
59 lines (52 loc) 1.85 kB
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'; @Injectable() 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, }; } }