fix issue

This commit is contained in:
Marshal
2026-08-20 18:10:29 +00:00
183 changed files with 14241 additions and 1265 deletions

View File

@@ -1,6 +1,7 @@
import { ApiPropertyOptional } from '@nestjs/swagger';
import { IsIn, IsOptional, IsUUID } from 'class-validator';
import { IdListParam } from '../../../common/dto/id-list.transform';
import { PaginationQueryDto } from '../../../common/dto/pagination-query.dto';
import {
TRAIN_SCHEDULE_STATUSES,
@@ -50,15 +51,22 @@ export class ListTrainSchedulesQueryDto extends PaginationQueryDto {
@IsIn(TRAIN_SCHEDULE_FREIGHT_TYPES as unknown as string[])
freightType?: TrainScheduleFreightType;
/** Origin station/yard id (exact match). */
@ApiPropertyOptional({ format: 'uuid' })
/** Origin station/yard — one id or a comma-separated list; matches ANY of them. */
@ApiPropertyOptional({
description: 'Origin station/yard id, or a comma-separated list (matches any of them).',
})
@IsOptional()
@IsUUID()
originStationId?: string;
@IdListParam()
@IsUUID(undefined, { each: true })
originStationId?: string[];
/** Destination station/yard id (exact match). */
@ApiPropertyOptional({ format: 'uuid' })
/** Destination station/yard — one id or a comma-separated list; ANDed with the origin. */
@ApiPropertyOptional({
description:
'Destination station/yard id, or a comma-separated list (matches any of them). ANDed with originStationId.',
})
@IsOptional()
@IsUUID()
destinationStationId?: string;
@IdListParam()
@IsUUID(undefined, { each: true })
destinationStationId?: string[];
}

View File

@@ -4596,8 +4596,15 @@ export class TrainSchedulingService {
const base: FindOptionsWhere<TrainSchedule> = {};
if (allowedDirections) base.direction = In(allowedDirections) as never;
if (query.status) base.status = query.status;
if (query.originStationId) base.originStationId = query.originStationId;
if (query.destinationStationId) base.destinationStationId = query.destinationStationId;
// Each end is an OR-list, the two ends AND together (origin-only and
// destination-only are both valid queries). `?.length` guards the empty
// array — `In([])` compiles to `IN ()`, a syntax error.
if (query.originStationId?.length) {
base.originStationId = In(query.originStationId) as never;
}
if (query.destinationStationId?.length) {
base.destinationStationId = In(query.destinationStationId) as never;
}
if (query.freightType) base.id = this.scheduleFreightTypeFilter(query.freightType) as never;
// Search fans out across every human-recognizable label; each OR variant