mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
85 lines
3.0 KiB
TypeScript
85 lines
3.0 KiB
TypeScript
import {
|
|
IsEnum,
|
|
IsIn,
|
|
IsInt,
|
|
IsISO8601,
|
|
IsOptional,
|
|
IsPositive,
|
|
IsString,
|
|
IsUUID,
|
|
} from "class-validator";
|
|
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
|
|
import {
|
|
PaymentEventType,
|
|
PaymentReferenceType,
|
|
PaymentService,
|
|
ProviderMethod,
|
|
} from "@edr/types";
|
|
|
|
/**
|
|
* Wire shape of the `PaymentEvent` envelope (@edr/types) delivered by the payment
|
|
* microservice's outbox relay. Delivery is at-least-once — the consumer is idempotent.
|
|
*/
|
|
export class PaymentEventDto {
|
|
@ApiProperty({ enum: [1] }) @IsIn([1]) version!: 1;
|
|
@ApiProperty() @IsUUID() eventId!: string;
|
|
@ApiProperty({ enum: ["payment.succeeded", "payment.failed"] })
|
|
@IsIn(["payment.succeeded", "payment.failed"])
|
|
eventType!: PaymentEventType;
|
|
|
|
@ApiProperty() @IsISO8601() occurredAt!: string;
|
|
@ApiProperty({ enum: PaymentService })
|
|
@IsEnum(PaymentService)
|
|
service!: string;
|
|
@ApiProperty() @IsUUID() intentId!: string;
|
|
@ApiProperty({ enum: PaymentReferenceType })
|
|
@IsEnum(PaymentReferenceType)
|
|
referenceType!: string;
|
|
|
|
@ApiProperty() @IsString() referenceId!: string;
|
|
@ApiProperty() @IsString() merchantOrderId!: string;
|
|
@ApiProperty({ enum: ProviderMethod })
|
|
@IsEnum(ProviderMethod)
|
|
provider!: string;
|
|
@ApiProperty() @IsInt() @IsPositive() amountMinor!: number;
|
|
@ApiProperty() @IsString() currency!: string;
|
|
|
|
@ApiPropertyOptional() @IsOptional() @IsString() providerTxnId?: string;
|
|
@ApiPropertyOptional() @IsOptional() @IsISO8601() paidAt?: string;
|
|
@ApiPropertyOptional() @IsOptional() @IsString() failureCode?: string;
|
|
@ApiPropertyOptional() @IsOptional() @IsString() failureMessage?: string;
|
|
}
|
|
|
|
export class MarkPaidResponseDto {
|
|
@ApiProperty() processed!: boolean;
|
|
@ApiPropertyOptional() alreadyFinalized?: boolean;
|
|
@ApiPropertyOptional() reason?: string;
|
|
}
|
|
|
|
/**
|
|
* CBE bill-query hop (docs/cbe/CBE_IMPLEMENTATION_PLAN.md Phase 4): the payment service asks
|
|
* "is this order still payable, by whom, for how much" while a CBE teller/app is on the line.
|
|
*/
|
|
export class BillQueryRequestDto {
|
|
// Typed `string`, not the enum: the @nestjs/swagger CLI plugin resolves an enum-typed
|
|
// property to a relative require() into packages/types, which does not exist inside the
|
|
// Docker image (only /app is copied) and crashes at boot with MODULE_NOT_FOUND. The
|
|
// decorators below still give us enum docs + runtime validation.
|
|
@ApiProperty({ enum: PaymentReferenceType })
|
|
@IsEnum(PaymentReferenceType)
|
|
referenceType!: string;
|
|
|
|
@ApiProperty() @IsString() referenceId!: string;
|
|
}
|
|
|
|
export class BillQueryResponseDto {
|
|
@ApiProperty() stillPayable!: boolean;
|
|
@ApiPropertyOptional() payerName?: string | null;
|
|
@ApiPropertyOptional() currentAmountMinor?: number | null;
|
|
@ApiPropertyOptional() currency?: string | null;
|
|
/** When stillPayable=false: "ALREADY_PAID" | "CANCELLED" | "REFUNDED" | "EXPIRED" | "NOT_FOUND" | "NOT_PAYABLE". */
|
|
@ApiPropertyOptional() reason?: string | null;
|
|
/** What the payer is paying for — CBE renders it beside the amount (Payment_Reason). */
|
|
@ApiPropertyOptional() paymentReason?: string | null;
|
|
}
|