112 lines
1.8 KiB
TypeScript
112 lines
1.8 KiB
TypeScript
import {
|
|
IsEmail,
|
|
IsString,
|
|
IsEnum,
|
|
IsBoolean,
|
|
IsOptional,
|
|
MinLength,
|
|
MaxLength,
|
|
Matches,
|
|
} from 'class-validator';
|
|
import { UserRole } from '../entities';
|
|
|
|
interface UserEntity {
|
|
id: string;
|
|
email: string;
|
|
username: string;
|
|
role: UserRole;
|
|
isActive: boolean;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
}
|
|
|
|
export class CreateUserDto {
|
|
@IsEmail()
|
|
email: string;
|
|
|
|
@IsString()
|
|
@MinLength(3)
|
|
@MaxLength(30)
|
|
@Matches(/^[a-zA-Z0-9_]+$/, {
|
|
message: 'Username can only contain letters, numbers, and underscores',
|
|
})
|
|
username: string;
|
|
|
|
@IsString()
|
|
@MinLength(6)
|
|
password: string;
|
|
|
|
@IsEnum(UserRole)
|
|
@IsOptional()
|
|
role?: UserRole = UserRole.USER;
|
|
|
|
@IsBoolean()
|
|
@IsOptional()
|
|
isActive?: boolean = true;
|
|
}
|
|
|
|
export class UpdateUserDto {
|
|
@IsEmail()
|
|
@IsOptional()
|
|
email?: string;
|
|
|
|
@IsString()
|
|
@MinLength(3)
|
|
@MaxLength(30)
|
|
@Matches(/^[a-zA-Z0-9_]+$/, {
|
|
message: 'Username can only contain letters, numbers, and underscores',
|
|
})
|
|
@IsOptional()
|
|
username?: string;
|
|
|
|
@IsString()
|
|
@MinLength(6)
|
|
@IsOptional()
|
|
password?: string;
|
|
|
|
@IsEnum(UserRole)
|
|
@IsOptional()
|
|
role?: UserRole;
|
|
|
|
@IsBoolean()
|
|
@IsOptional()
|
|
isActive?: boolean;
|
|
}
|
|
|
|
export class LoginUserDto {
|
|
@IsString()
|
|
username: string;
|
|
|
|
@IsString()
|
|
password: string;
|
|
}
|
|
|
|
export class UserResponseDto {
|
|
id: string;
|
|
email: string;
|
|
username: string;
|
|
role: UserRole;
|
|
isActive: boolean;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
|
|
constructor(user: UserEntity) {
|
|
this.id = user.id;
|
|
this.email = user.email;
|
|
this.username = user.username;
|
|
this.role = user.role;
|
|
this.isActive = user.isActive;
|
|
this.createdAt = user.createdAt;
|
|
this.updatedAt = user.updatedAt;
|
|
}
|
|
}
|
|
|
|
export class ChangePasswordDto {
|
|
@IsString()
|
|
currentPassword: string;
|
|
|
|
@IsString()
|
|
@MinLength(6)
|
|
newPassword: string;
|
|
}
|