import { BadRequestException, Injectable, // Logger, PipeTransform, } from '@nestjs/common'; @Injectable() export class ValidateSearchPipe implements PipeTransform { constructor( private model: any, private additionalAttributes: string[] = [], ) {} transform(value: string) { let search = {}; if (value) { try { search = JSON.parse(value); } catch (err) { throw new BadRequestException('Bad value for search.'); } const attributes: string[] = [ ...this.additionalAttributes, ...Object.keys(this.model.tableAttributes), ]; const searchAttributes: string[] = Object.keys(search); const invalidKeys = searchAttributes.filter( (attr) => !attributes.includes(attr), ); if (invalidKeys.length > 0) { throw new BadRequestException( `${invalidKeys} ${ invalidKeys.length > 1 ? 'are invalid keys' : 'is an invalid key' } for search query`, ); } } return value; } }