-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate-user.dto.ts
More file actions
114 lines (103 loc) · 2.31 KB
/
create-user.dto.ts
File metadata and controls
114 lines (103 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import { ApiProperty } from '@nestjs/swagger';
import {
IsEmail,
IsString,
IsNotEmpty,
MinLength,
MaxLength,
IsEnum,
IsOptional,
Matches,
} from 'class-validator';
export enum UserRole {
CITIZEN = 'citizen',
GOVERNMENT = 'government',
NGO = 'ngo',
ADMIN = 'admin',
}
export class CreateUserDto {
@ApiProperty({
description: 'Adresse email de l\'utilisateur',
example: 'ahmed.benali@email.com',
})
@IsEmail()
@IsNotEmpty()
email: string;
@ApiProperty({
description: 'Nom d\'utilisateur unique',
example: 'ahmed_benali',
})
@IsString()
@IsNotEmpty()
@MinLength(3)
@MaxLength(30)
@Matches(/^[a-zA-Z0-9_-]+$/, {
message: 'Le nom d\'utilisateur ne peut contenir que des lettres, chiffres, tirets et underscores',
})
username: string;
@ApiProperty({
description: 'Mot de passe (minimum 8 caractères)',
example: 'MotDePasse123!',
})
@IsString()
@IsNotEmpty()
@MinLength(8)
@Matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]/, {
message: 'Le mot de passe doit contenir au moins une minuscule, une majuscule, un chiffre et un caractère spécial',
})
password: string;
@ApiProperty({
description: 'Prénom de l\'utilisateur',
example: 'Ahmed',
})
@IsString()
@IsNotEmpty()
@MaxLength(50)
firstName: string;
@ApiProperty({
description: 'Nom de famille de l\'utilisateur',
example: 'Benali',
})
@IsString()
@IsNotEmpty()
@MaxLength(50)
lastName: string;
@ApiProperty({
description: 'Rôle de l\'utilisateur',
enum: UserRole,
example: UserRole.CITIZEN,
required: false,
})
@IsOptional()
@IsEnum(UserRole)
role?: UserRole = UserRole.CITIZEN;
@ApiProperty({
description: 'Numéro de téléphone',
example: '+213555123456',
required: false,
})
@IsOptional()
@IsString()
@Matches(/^\+[1-9]\d{1,14}$/, {
message: 'Le numéro de téléphone doit être au format international (+213...)',
})
phone?: string;
@ApiProperty({
description: 'Ville de résidence',
example: 'Alger',
required: false,
})
@IsOptional()
@IsString()
@MaxLength(100)
city?: string;
@ApiProperty({
description: 'Wilaya de résidence',
example: 'Alger',
required: false,
})
@IsOptional()
@IsString()
@MaxLength(100)
state?: string;
}