Files
edr-platform/apps/edr-payment-api/src/modules/outbox/dto/test-payment-event.dto.ts
2026-06-30 15:51:47 +03:00

93 lines
2.4 KiB
TypeScript

import { ApiPropertyOptional } from "@nestjs/swagger";
import {
IsEnum,
IsIn,
IsInt,
IsOptional,
IsPositive,
IsString,
} from "class-validator";
import {
PaymentEventType,
PaymentReferenceType,
PaymentService,
ProviderMethod,
} from "@edr/types";
/**
* Body for the dev-only POST /test/payment-event endpoint. Every field is optional — the
* controller fills sensible defaults so an empty `{}` publishes a `payment.succeeded` to the
* passenger queue. Set `referenceId` to a real bookingId to exercise the consumer's side effects
* (seat confirm / ticket issue); leave it blank to only prove RabbitMQ delivery.
*/
export class TestPaymentEventDto {
@ApiPropertyOptional({
enum: ["payment.succeeded", "payment.failed"],
default: "payment.succeeded",
})
@IsOptional()
@IsIn(["payment.succeeded", "payment.failed"])
eventType?: PaymentEventType;
@ApiPropertyOptional({ enum: PaymentService, default: PaymentService.PASSENGER })
@IsOptional()
@IsEnum(PaymentService)
service?: PaymentService;
@ApiPropertyOptional({
enum: PaymentReferenceType,
default: PaymentReferenceType.BOOKING,
})
@IsOptional()
@IsEnum(PaymentReferenceType)
referenceType?: PaymentReferenceType;
@ApiPropertyOptional({
description: "Domain order id (e.g. bookingId). Defaults to a random uuid.",
})
@IsOptional()
@IsString()
referenceId?: string;
@ApiPropertyOptional({ description: "Defaults to a random uuid." })
@IsOptional()
@IsString()
intentId?: string;
@ApiPropertyOptional({ description: "Defaults to test-<random>." })
@IsOptional()
@IsString()
merchantOrderId?: string;
@ApiPropertyOptional({ enum: ProviderMethod, default: ProviderMethod.WAAFI })
@IsOptional()
@IsEnum(ProviderMethod)
provider?: ProviderMethod;
@ApiPropertyOptional({ default: 10000, description: "Amount in minor units." })
@IsOptional()
@IsInt()
@IsPositive()
amountMinor?: number;
@ApiPropertyOptional({ default: "ETB" })
@IsOptional()
@IsString()
currency?: string;
@ApiPropertyOptional({ description: "Only used for payment.succeeded." })
@IsOptional()
@IsString()
providerTxnId?: string;
@ApiPropertyOptional({ description: "Only used for payment.failed." })
@IsOptional()
@IsString()
failureCode?: string;
@ApiPropertyOptional({ description: "Only used for payment.failed." })
@IsOptional()
@IsString()
failureMessage?: string;
}