All files / approval-engine/mappers approval-event.mapper.ts

0% Statements 0/22
0% Branches 0/18
0% Functions 0/2
0% Lines 0/22

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 55 56 57 58 59 60 61 62 63 64                                                                                                                               
import { InvalidSchemaError } from "../../commons/errors/invalid-schema-error.js";
import { LedgerEvent } from "../../tr8-script/domain/ledger-event.js";
import { ApprovalEvent } from "../domain/approval-event.js";
import { AssetStateChangeLogEvent } from "../domain/asset-change-log.js";
import { BookCreationEvent } from "../domain/book-creation-event.js";
import { SuspensionEvent } from "../domain/suspend-event.js";
import { ApprovalEventDto } from "../dtos/approval-event-message.dto.js";
import { AssetStateChangeLogEventMapper } from "./asset-state-change-log-event.mapper.js";
import { BookCreationEventMapper } from "./book-creation-event.mapper.js";
import { LedgerEventMapper } from "./ledger-event.mapper.js";
 
export class ApprovalEventMapper {
  static fromMessage(dto: ApprovalEventDto): ApprovalEvent {
    let event:
      | BookCreationEvent
      | AssetStateChangeLogEvent
      | LedgerEvent
      | SuspensionEvent
      | null = null;
    if (dto.bookCreationEvent != null) {
      event = BookCreationEventMapper.fromMessage(dto.bookCreationEvent);
    } else if (dto.ledgerEvent != null) {
      event = LedgerEventMapper.fromMessage(dto.ledgerEvent);
    } else if (dto.assetStateChangeLogEvent != null) {
      event = AssetStateChangeLogEventMapper.fromMessage(
        dto.assetStateChangeLogEvent,
      );
    } else if (dto.suspensionEvent) {
      event = dto.suspensionEvent;
    }
    if (event == null) {
      throw new InvalidSchemaError(
        "approvalEventMapperSchema",
        "Schema is missing required fields",
      );
    }
    return {
      event: event,
    };
  }
 
  static toMessage(value: ApprovalEvent): ApprovalEventDto {
    const dto: ApprovalEventDto = {
      bookCreationEvent: null,
      assetStateChangeLogEvent: null,
      ledgerEvent: null,
      suspensionEvent: null,
    };
 
    if ("txs" in value.event) {
      dto.ledgerEvent = LedgerEventMapper.toMessage(value.event);
    } else if ("createAssetState" in value.event) {
      dto.bookCreationEvent = BookCreationEventMapper.toMessage(value.event);
    } else if ("assetStateChangeLog" in value.event) {
      dto.assetStateChangeLogEvent = AssetStateChangeLogEventMapper.toMessage(
        value.event,
      );
    } else if ("suspensions" in value.event) {
      dto.suspensionEvent = value.event;
    }
    return dto;
  }
}