Files
backend/src/products/dto/create-product.dto.ts
T

221 lines
3.1 KiB
TypeScript

import { Type } from 'class-transformer';
import {
IsArray,
IsBoolean,
IsInt,
IsOptional,
IsString,
Min,
MinLength,
ValidateNested,
} from 'class-validator';
export class ProductVariantDto {
@IsOptional()
@IsString()
id?: string;
@IsOptional()
@IsString()
colorId?: string;
@IsOptional()
@IsString()
sizeId?: string;
@IsOptional()
@IsString()
packageId?: string;
@IsInt()
@Min(0)
price!: number;
@IsOptional()
@IsInt()
@Min(0)
discountPrice?: number;
@IsOptional()
@IsInt()
@Min(0)
vipPrice?: number;
}
export class CreateProductDto {
@IsString()
@MinLength(1)
nameFa!: string;
@IsOptional()
@IsString()
nameEn?: string;
@IsOptional()
@IsString()
summary?: string;
@IsOptional()
@IsString()
description?: string;
@IsInt()
@Min(0)
price!: number;
@IsOptional()
@IsInt()
@Min(0)
discountPrice?: number;
@IsOptional()
@IsString()
categoryId?: string;
@IsOptional()
@IsString()
brandId?: string;
@IsOptional()
@IsString()
imageUrl?: string;
@IsOptional()
@IsString()
imageKey?: string;
@IsOptional()
@IsArray()
@IsString({ each: true })
galleryUrls?: string[];
@IsOptional()
@IsArray()
@IsString({ each: true })
galleryKeys?: string[];
@IsOptional()
@IsArray()
@IsString({ each: true })
tags?: string[];
@IsOptional()
@IsBoolean()
published?: boolean;
@IsOptional()
@IsBoolean()
vipEnabled?: boolean;
@IsOptional()
@IsBoolean()
vipOnly?: boolean;
@IsOptional()
@IsBoolean()
vipSpecialPrice?: boolean;
@IsOptional()
@IsInt()
@Min(0)
vipPrice?: number;
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => ProductVariantDto)
variants?: ProductVariantDto[];
/** SUPER_ADMIN only */
@IsOptional()
@IsString()
storeId?: string;
}
export class UpdateProductDto {
@IsOptional()
@IsString()
@MinLength(1)
nameFa?: string;
@IsOptional()
@IsString()
nameEn?: string;
@IsOptional()
@IsString()
summary?: string;
@IsOptional()
@IsString()
description?: string;
@IsOptional()
@IsInt()
@Min(0)
price?: number;
@IsOptional()
@IsInt()
@Min(0)
discountPrice?: number | null;
@IsOptional()
@IsString()
categoryId?: string | null;
@IsOptional()
@IsString()
brandId?: string | null;
@IsOptional()
@IsString()
imageUrl?: string | null;
@IsOptional()
@IsString()
imageKey?: string | null;
@IsOptional()
@IsArray()
@IsString({ each: true })
galleryUrls?: string[];
@IsOptional()
@IsArray()
@IsString({ each: true })
galleryKeys?: string[];
@IsOptional()
@IsArray()
@IsString({ each: true })
tags?: string[];
@IsOptional()
@IsBoolean()
published?: boolean;
@IsOptional()
@IsBoolean()
vipEnabled?: boolean;
@IsOptional()
@IsBoolean()
vipOnly?: boolean;
@IsOptional()
@IsBoolean()
vipSpecialPrice?: boolean;
@IsOptional()
@IsInt()
@Min(0)
vipPrice?: number | null;
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => ProductVariantDto)
variants?: ProductVariantDto[];
}