//match.decorator.ts
class-validator에 있는 공식 문서에 있는 대로 썻다.
import { registerDecorator, ValidationArguments, ValidationOptions } from 'class-validator';

export function IsEqualTo(property: string, validationOptions?: ValidationOptions) {
    return (object: any, propertyName: string) => {
      registerDecorator({
        name: 'isEqualTo', //아무거나 써도 되는 거같다.
        target: object.constructor,
        propertyName,
        constraints: [property],
        options: validationOptions,
        validator: {  //검증 validate는 무조건 실행된다 
          validate(value: any, args: ValidationArguments) { //검증에 성공했을떄 
            console.log(value) //ConfirmPassword의 값이 들어가있다.
          const [relatedPropertyName] = args.constraints;  //args.constraints  == ["password"]
          const relatedValue = (args.object as any)[relatedPropertyName];
          return value === relatedValue; //password와 ConfirmPassword의 값이 같으면 통과한다.
        },
 
        defaultMessage(args: ValidationArguments) {  //검증에 실패했을떄(password와 ConfirmPassword의 값이 않을떄)
          const [relatedPropertyName] = args.constraints;
          return `${propertyName} must match ${relatedPropertyName} exactly`; //오류 메세지를 반환한다.
        },
      },
    });
  };
}
import { IsBoolean, IsEmail , IsOptional, IsString, MinLength } from "class-validator";
import { IsEqualTo } from "src/decorators/match.decorator"; //위에 있는 파일 경로이다
export class CreateAuthDto {
    @IsEmail()
    email : string

    @IsString()
    @MinLength(5,{message : "5글자 이상 입력해주세요"})
    Password : string


    @IsString()
    @IsEqualTo("Password") //비교할 것을 넣어주면 된다.
    ConfirmPassword : string


    @IsBoolean()
    @IsOptional()
    privilege : boolean
}

 

'TypeScript' 카테고리의 다른 글

Interceptor  (0) 2023.12.22
Everyday Types  (0) 2023.12.20
자동 재시작 & 자동 컴파일 .js생성  (1) 2023.12.02

+ Recent posts