116 أسطر
2.7 KiB
TypeScript
116 أسطر
2.7 KiB
TypeScript
import { ApiProperty } from '@nestjs/swagger';
|
|
import {
|
|
IsArray,
|
|
IsBoolean,
|
|
IsEmail,
|
|
IsEnum,
|
|
IsNumber,
|
|
IsOptional,
|
|
IsString,
|
|
IsUrl,
|
|
Length,
|
|
Max,
|
|
Matches,
|
|
Min,
|
|
} from 'class-validator';
|
|
import { ExperienceLevel } from '../../../common/enums/experience-level.enum';
|
|
import { MusicRole } from '../../../common/enums/music-role.enum';
|
|
|
|
export class CreateUserDto {
|
|
@ApiProperty({ example: 'John Doe' })
|
|
@IsString()
|
|
@Length(2, 80)
|
|
name!: string;
|
|
|
|
@ApiProperty({ required: false, example: 'Artist One' })
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(0, 80)
|
|
stageName?: string;
|
|
|
|
@ApiProperty({ example: 'john_doe' })
|
|
@IsString()
|
|
@Length(3, 30)
|
|
@Matches(/^[a-zA-Z0-9_.]+$/, { message: 'username can contain letters, numbers, _ and .' })
|
|
username!: string;
|
|
|
|
@ApiProperty({ example: 'john@example.com' })
|
|
@IsEmail()
|
|
email!: string;
|
|
|
|
@ApiProperty({ minLength: 8, example: 'StrongPass123!' })
|
|
@IsString()
|
|
@Length(8, 64)
|
|
password!: string;
|
|
|
|
@ApiProperty({ required: false, maxLength: 160 })
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(0, 160)
|
|
bio?: string;
|
|
|
|
@ApiProperty({ required: false, example: 'https://cdn.example.com/avatar.jpg' })
|
|
@IsOptional()
|
|
@IsUrl({ require_tld: false })
|
|
avatar?: string;
|
|
|
|
@ApiProperty({ required: false, example: 'Riyadh, Saudi Arabia' })
|
|
@IsOptional()
|
|
@IsString()
|
|
@Length(0, 120)
|
|
location?: string;
|
|
|
|
@ApiProperty({ required: false, example: 24.7136, minimum: -90, maximum: 90 })
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(-90)
|
|
@Max(90)
|
|
latitude?: number;
|
|
|
|
@ApiProperty({ required: false, example: 46.6753, minimum: -180, maximum: 180 })
|
|
@IsOptional()
|
|
@IsNumber()
|
|
@Min(-180)
|
|
@Max(180)
|
|
longitude?: number;
|
|
|
|
@ApiProperty({ required: false, default: false })
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
isPrivate?: boolean;
|
|
|
|
@ApiProperty({ required: false, default: false })
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
isVerified?: boolean;
|
|
|
|
@ApiProperty({ required: false, enum: MusicRole, isArray: true })
|
|
@IsOptional()
|
|
@IsArray()
|
|
@IsEnum(MusicRole, { each: true })
|
|
musicRoles?: MusicRole[];
|
|
|
|
@ApiProperty({ required: false, enum: ExperienceLevel, example: ExperienceLevel.BEGINNER })
|
|
@IsOptional()
|
|
@IsEnum(ExperienceLevel)
|
|
experienceLevel?: ExperienceLevel;
|
|
|
|
@ApiProperty({ required: false, type: [String], example: ['Tarab', 'Pop'] })
|
|
@IsOptional()
|
|
@IsArray()
|
|
@IsString({ each: true })
|
|
musicGenres?: string[];
|
|
|
|
@ApiProperty({ required: false, type: [String], example: ['Oud', 'Piano'] })
|
|
@IsOptional()
|
|
@IsArray()
|
|
@IsString({ each: true })
|
|
favoriteInstruments?: string[];
|
|
|
|
@ApiProperty({ required: false, type: [String], example: ['Bayati', 'Rast'] })
|
|
@IsOptional()
|
|
@IsArray()
|
|
@IsString({ each: true })
|
|
favoriteMaqamat?: string[];
|
|
}
|