import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { IsBoolean, IsEnum, IsNumber, IsOptional, IsString, Max, Min } from 'class-validator'; import { Type } from 'class-transformer'; const INDUSTRIAL_PROPERTY_TYPES = [ 'industrial_land', 'ready_built_factory', 'ready_built_warehouse', 'logistics_center', 'office_in_park', 'data_center', ] as const; export class EstimateIndustrialRentDto { @ApiProperty({ example: 'Bình Dương', description: 'Tỉnh/thành phố' }) @IsString() province!: string; @ApiProperty({ example: 'ready_built_factory', enum: INDUSTRIAL_PROPERTY_TYPES, description: 'Loại BĐS công nghiệp', }) @IsEnum(INDUSTRIAL_PROPERTY_TYPES) property_type!: (typeof INDUSTRIAL_PROPERTY_TYPES)[number]; @ApiProperty({ example: 5000, description: 'Diện tích yêu cầu (m²)' }) @IsNumber() @Type(() => Number) @Min(1) area_m2!: number; @ApiProperty({ example: 10, description: 'Thời hạn thuê (năm)' }) @IsNumber() @Type(() => Number) @Min(1) @Max(70) lease_duration_years!: number; @ApiPropertyOptional({ example: 'VSIP Bình Dương', description: 'Tên KCN cụ thể' }) @IsOptional() @IsString() park_name?: string; @ApiPropertyOptional({ example: false, description: 'Yêu cầu cầu trục' }) @IsOptional() @IsBoolean() @Type(() => Boolean) requires_crane?: boolean; @ApiPropertyOptional({ example: 500, description: 'Công suất điện yêu cầu (KVA)' }) @IsOptional() @IsNumber() @Type(() => Number) required_power_kva?: number; @ApiPropertyOptional({ example: false, description: 'Yêu cầu xử lý nước thải' }) @IsOptional() @IsBoolean() @Type(() => Boolean) requires_wastewater?: boolean; }