I have a DTO that has several properties, including creditCard<CreditCardDto>
, creditCardToken<CreditCardTokenDto>
, googlePay<GooglePayDto>
, applePay<ApplePayDto>
. Only one of these properties can exist at a time, so I would like to provide four Swagger examples like this for each scenario.
Right now this is what my DTO looks like, with some commented out lines showing what I've tried. It seems like this should be possible, but I must be missing something. Any ideas?
// [...]
// @ApiExtraModels(CreditCardDto, CreditCardTokenDto, ApplePayDto, GooglePayDto)
@ApiPropertyOptional({
examples: {
CreditCardDto: { value: CreditCardDto },
CreditCardTokenDto: { value: CreditCardTokenDto },
ApplePayDto: { value: ApplePayDto },
GooglePayDto: { value: GooglePayDto },
},
// example: ['foo', 'CreditCardTokenDto'],
description: 'Contains information about credit card.',
})
@IncompatibleWith(['creditCardToken', 'applePay', 'googlePay'])
@ValidateNested()
@Type(() => CreditCardDto)
@IsOptional()
creditCard?: CreditCardDto;
@ApiPropertyOptional({
examples: {
CreditCardDto: { value: CreditCardDto },
CreditCardTokenDto: { value: CreditCardTokenDto },
ApplePayDto: { value: ApplePayDto },
GooglePayDto: { value: GooglePayDto },
},
// example: CreditCardTokenDto,
description: 'Contains information about credit card token.',
})
@IncompatibleWith(['creditCard', 'applePay', 'googlePay'])
@ValidateNested()
@Type(() => CreditCardTokenDto)
@IsOptional()
creditCardToken?: CreditCardTokenDto;
@ApiPropertyOptional({
examples: {
CreditCardDto: { value: CreditCardDto },
CreditCardTokenDto: { value: CreditCardTokenDto },
ApplePayDto: { value: ApplePayDto },
GooglePayDto: { value: GooglePayDto },
},
// example: ApplePayDto,
description: 'Contains information about Apple Pay.',
})
@IncompatibleWith(['creditCard', 'creditCardToken', 'googlePay'])
@ValidateNested()
@Type(() => ApplePayDto)
@IsOptional()
applePay?: ApplePayDto;
@ApiPropertyOptional({
examples: {
CreditCardDto: { value: CreditCardDto },
CreditCardTokenDto: { value: CreditCardTokenDto },
ApplePayDto: { value: ApplePayDto },
GooglePayDto: { value: GooglePayDto },
},
// example: GooglePayDto,
description: 'Contains information about Apple Pay.',
})
@IncompatibleWith(['creditCard', 'creditCardToken', 'applePay'])
@ValidateNested()
@Type(() => GooglePayDto)
@IsOptional()
googlePay?: GooglePayDto;
}