0

I need to create a validator that contains an array of objects, a string, and a number.

Here is a similar question I found:: Class-validator - validate array of objects

Below is how the data should be filtered... meaning these are the good parameters that I want to extract from the body of the request

{
"call_transfers": [
  {"bid":33,"bid_id":"1239dasdj8","carrier":"Jimmies pizza", "qualification_duration":222},
  {"bid":28,"bid_id":"3234sdfJIA","carrier":"Krusty crabs", "qualification_duration":22},
  {"bid":19,"bid_id":"9anHXawefa","carrier":"Bikiny bottom", "qualification_duration":33},
        ],
"ping_id": "adi2837dasdjc8",
"time" : 0.123      
}

I am creating the following request to test if the class validator is working as expected ::

{
"name" : "Juan",
"email": "jcasdasda@gmail.com",
"token" : "1oap8X8ase@#*&",
"call_transfers": [
    {"bid":33,"bid_id":"1239dasdj8","carrier":"Jimmies pizza", "qualification_duration":222, "fakeParam":123},
    {"bid":28,"bid_id":"3234sdfJIA","carrier":"Krusty crabs", "qualification_duration":22, "fakeParam":123 },
    {"bid":19,"bid_id":"9anHXawefa","carrier":"Bikiny bottom", "qualification_duration":33, "fakeParam":123}
    ],
"ping_id": "adi2837dasdjc8",
"time" : 0.123,
"authParameters": [{"id":123,"type":"user","value":"chocolates"}]
}

However, I am not able to correctly filter the parameters I want!

This is the controller logic that I am using ::

    setFlagsOnBid(
        @Body('call_transfers') call_transfers: MediaAlphaResponseItem,
        @Body('ping_id') ping_id: MediaAlphaResponseItem,
        @Body('time') time: MediaAlphaResponseItem,
         
        ){
        const filteredData = { call_transfers , ping_id , time };
        return filteredData;
    
    }

this is the class validation that I am using::

export class MediaAlphaResponseItem {
    @ValidateNested({ each: true })
    @Type(() => MediaAlphaCallTransferItem)
    call_transfers: MediaAlphaCallTransferItem[];

    @IsString()
    ping_id:string;

    @IsNumber()
    time:number;

}


 class MediaAlphaCallTransferItem {

    @IsNumber()
    bid:number;

    @IsString()
    bid_id:string;

    @IsString()
    carrier:string;

    @IsNumber()
    qualification_duration:number;
}

This is the output in postman enter image description here

Juan Casas
  • 268
  • 2
  • 13

1 Answers1

-1
setFlagsOnBid(@Body() filteredData: MediaAlphaResponseItem) {
  return filteredData;
}
Cody Tseng
  • 190
  • 4