import { ApiPropertyOptional } from '@nestjs/swagger'; import { Type } from 'class-transformer'; import { EmptyStringToUndefined } from '../../common/transforms/empty-string-to-undefined.transform.js'; import { IsInt, IsOptional, IsString, Max, Min } from 'class-validator'; /** * 组织查询 DTO:用于医院/科室/小组列表筛选与分页。 */ export class OrganizationQueryDto { @ApiPropertyOptional({ description: '关键词(按名称模糊匹配)', example: '神经', }) @IsOptional() @IsString({ message: 'keyword 必须是字符串' }) keyword?: string; @ApiPropertyOptional({ description: '医院 ID', example: 1 }) @IsOptional() @EmptyStringToUndefined() @Type(() => Number) @IsInt({ message: 'hospitalId 必须是整数' }) @Min(1, { message: 'hospitalId 必须大于 0' }) hospitalId?: number; @ApiPropertyOptional({ description: '科室 ID', example: 1 }) @IsOptional() @EmptyStringToUndefined() @Type(() => Number) @IsInt({ message: 'departmentId 必须是整数' }) @Min(1, { message: 'departmentId 必须大于 0' }) departmentId?: number; @ApiPropertyOptional({ description: '页码(默认 1)', example: 1, default: 1, }) @IsOptional() @EmptyStringToUndefined() @Type(() => Number) @IsInt({ message: 'page 必须是整数' }) @Min(1, { message: 'page 最小为 1' }) page?: number = 1; @ApiPropertyOptional({ description: '每页数量(默认 20,最大 100)', example: 20, default: 20, }) @IsOptional() @EmptyStringToUndefined() @Type(() => Number) @IsInt({ message: 'pageSize 必须是整数' }) @Min(1, { message: 'pageSize 最小为 1' }) @Max(100, { message: 'pageSize 最大为 100' }) pageSize?: number = 20; }