Skip to content

Commit cc125b3

Browse files
committed
Added IsFirstLetterUppercase decorator
1 parent 9a2b8a6 commit cc125b3

File tree

3 files changed

+46
-5
lines changed

3 files changed

+46
-5
lines changed

apps/car-rental-backend/src/main.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Logger } from '@nestjs/common';
1+
import { Logger, ValidationPipe } from '@nestjs/common';
22
import { NestFactory } from '@nestjs/core';
33
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
44
import { AppModule } from './app/app.module';
@@ -8,6 +8,7 @@ async function bootstrap() {
88
const config = new DocumentBuilder().setTitle('Car Rental API').build();
99
const documentFactory = () => SwaggerModule.createDocument(app, config);
1010
const globalPrefix = 'api';
11+
app.useGlobalPipes(new ValidationPipe());
1112
app.setGlobalPrefix(globalPrefix);
1213
const port = process.env.PORT || 3000;
1314
SwaggerModule.setup('api', app, documentFactory);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import {
2+
registerDecorator,
3+
ValidationOptions,
4+
ValidatorConstraint,
5+
ValidatorConstraintInterface,
6+
} from 'class-validator';
7+
8+
@ValidatorConstraint({ name: 'isFirstLetterUppercase', async: false })
9+
export class IsFirstLetterUppercaseConstraint
10+
implements ValidatorConstraintInterface
11+
{
12+
validate(text: string) {
13+
return /^[A-Z]/.test(text);
14+
}
15+
16+
defaultMessage() {
17+
return 'The first letter of the text must be uppercase';
18+
}
19+
}
20+
21+
22+
export function IsFirstLetterUppercase(validationOptions?: ValidationOptions) {
23+
return function (object: object, propertyName: string) {
24+
registerDecorator({
25+
target: object.constructor,
26+
propertyName: propertyName,
27+
options: validationOptions,
28+
constraints: [],
29+
validator: IsFirstLetterUppercaseConstraint,
30+
});
31+
};
32+
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
1-
import { ApiProperty } from "@nestjs/swagger";
2-
1+
import { ApiProperty } from '@nestjs/swagger';
2+
import { IsString, Length } from 'class-validator';
3+
import { IsFirstLetterUppercase } from '../../validators/is-first-letter-uppercase.decorator';
34
export class CreateVehicleBrandDto {
4-
@ApiProperty({ example: 'Toyota', description: 'The name of the vehicle brand', type: 'string' })
5-
name: string;
5+
@IsString()
6+
@Length(1, 50)
7+
@IsFirstLetterUppercase()
8+
@ApiProperty({
9+
example: 'Toyota',
10+
description: 'The name of the vehicle brand. The first character must be uppercase. Allowed length is 1-50 characters.',
11+
type: 'string',
12+
})
13+
name: string;
614
}

0 commit comments

Comments
 (0)