All files / journal-processor/mappers journal-event.mapper.ts

0% Statements 0/10
100% Branches 0/0
0% Functions 0/8
0% Lines 0/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54                                                                                                           
import { AmountMapper } from "../../commons/mappers/amount.mapper.js";
import { Amount } from "../../tr8-script/domain/value.js";
import { JournalEvent } from "../domain/journal-events.js";
import { JournalEventDto } from "../dtos/journal-event.dto.js";
import { AmountDto } from "../../commons/dtos/values.dto.js";
 
class JournalEventMapper {
  static toDTO(domain: JournalEvent): JournalEventDto {
    return {
      ...domain,
      metadata: JSON.stringify(domain.metadata),
      variables: Object.keys(domain.variables).reduce(
        (acc, k) => {
          acc[k] = AmountMapper.toDTO(domain.variables[k]!);
          return acc;
        },
        {} as Record<string, AmountDto>,
      ),
      journals: domain.journals.map((journal) => ({
        ...journal,
        change: AmountMapper.toDTO(journal.change),
      })),
      metrics: domain.metrics.map((metric) => ({
        ...metric,
        change: AmountMapper.toDTO(metric.change),
      })),
    };
  }
 
  static fromDTO(dto: JournalEventDto): JournalEvent {
    return {
      ...dto,
      metadata: JSON.parse(dto.metadata),
      variables: Object.keys(dto.variables).reduce(
        (acc, k) => {
          acc[k] = AmountMapper.fromDTO(dto.variables[k]!);
          return acc;
        },
        {} as Record<string, Amount>,
      ),
      journals: dto.journals.map((journal) => ({
        ...journal,
        change: AmountMapper.fromDTO(journal.change),
      })),
      metrics: dto.metrics.map((metric) => ({
        ...metric,
        change: AmountMapper.fromDTO(metric.change),
      })),
    };
  }
}
 
export { JournalEventMapper };