Validator para validar RUT en NestJS

rut.validator.ts
1
import {
2
ValidationOptions,
3
ValidatorConstraint,
4
ValidatorConstraintInterface,
5
registerDecorator,
6
} from "class-validator";
7
8
@ValidatorConstraint({ name: "RutValidator", async: false })
9
class RutValidator implements ValidatorConstraintInterface {
10
validate(value: string): boolean {
11
if (!value || !value.match(/^[0-9]+[-]{1}[0-9kK]{1}$/)) {
12
return false;
13
}
14
15
return true;
16
}
17
defaultMessage(): string {
18
return `$property must be a valid RUT (e.g. 12345678-9)`;
19
}
20
}
21
export function IsRut(validationOptions?: ValidationOptions) {
22
return (object: unknown, propertyName: string) => {
23
registerDecorator({
24
name: "isRut",
25
target: object.constructor,
26
propertyName: propertyName,
27
options: validationOptions,
28
validator: RutValidator,
29
});
30
};
31
}

Modo de uso:

test.controller.ts
1
import { IsRut } from "./rut.validator";
2
import { Controller, Get, Header, Query } from "@nestjs/common";
3
import { Validate } from "class-validator";
4
5
export class TestRequestDto {
6
@IsRut()
7
clientCode: string;
8
}
9
10
@Controller()
11
export class TestController {
12
@Get("test-rut")
13
@Header("content-type", "application/json")
14
testRut(
15
@Query()
16
rut: TestRequestDto,
17
): any {
18
return rut;
19
}
20
}

resultado:

curl http://localhost:8080/test-rut?rut=invalid_rut

{
"message": "rut must be a valid RUT (e.g. 12345678-9)",
"error": "Bad Request",
"statusCode": 400
}