mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-08 07:45:45 +00:00
update locaomotive and fix wagon transfer issue
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
import { ApiPropertyOptional } from '@nestjs/swagger';
|
||||
import { IsEnum, IsOptional, IsString } from 'class-validator';
|
||||
import { IsEnum, IsOptional } from 'class-validator';
|
||||
|
||||
import { PaginationQueryDto } from '../../../common/dto/pagination-query.dto';
|
||||
import { RouteStatus } from '../entities/route.entity';
|
||||
|
||||
export class FilterRoutesDto {
|
||||
@ApiPropertyOptional({ description: 'Search origin/destination yard codes or names' })
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
search?: string;
|
||||
|
||||
// `search` (origin/destination/milestone yard codes and names) plus
|
||||
// `page`/`pageSize` come from the shared pagination DTO; the page window is only
|
||||
// read by `GET /routes/paged`.
|
||||
export class FilterRoutesDto extends PaginationQueryDto {
|
||||
@ApiPropertyOptional({ enum: ['AVAILABLE', 'MAINTENANCE', 'DAMAGED', 'STOP_WORKING'] })
|
||||
@IsOptional()
|
||||
@IsEnum(['AVAILABLE', 'MAINTENANCE', 'DAMAGED', 'STOP_WORKING'])
|
||||
|
||||
@@ -21,6 +21,13 @@ export class RoutesController {
|
||||
return this.routesService.findAll(filter);
|
||||
}
|
||||
|
||||
// Must be declared before @Get(':id') so the path isn't captured as an id.
|
||||
@Get('paged')
|
||||
@ApiOperation({ summary: 'List routes, paginated ({items, meta})' })
|
||||
findAllPaged(@Query() filter: FilterRoutesDto) {
|
||||
return this.routesService.findAllPaged(filter);
|
||||
}
|
||||
|
||||
@Get(':id')
|
||||
@ApiOperation({ summary: 'Get route by ID' })
|
||||
findOne(@Param('id', ParseUUIDPipe) id: string) {
|
||||
|
||||
@@ -4,9 +4,10 @@ import {
|
||||
Injectable,
|
||||
NotFoundException,
|
||||
} from '@nestjs/common';
|
||||
import { TrainScheduleStatus } from '@edr/types';
|
||||
import { PaginatedResponse, TrainScheduleStatus } from '@edr/types';
|
||||
import { DataSource, In, Not } from 'typeorm';
|
||||
|
||||
import { paginateArray } from '../../common/utils/pagination.util';
|
||||
import { deriveTradeDirection } from '../../common/derive-trade-direction.util';
|
||||
import { Yard } from '../rule-engine/entities/yard.entity';
|
||||
import { YardDistance } from '../rule-engine/entities/yard-distance.entity';
|
||||
@@ -68,6 +69,18 @@ export class RoutesService {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* `findAll` on the shared `{items, meta}` envelope.
|
||||
*
|
||||
* ponytail: slices in memory — the corridor table is small (tens of rows) and
|
||||
* both the ordering (formatted "A → B → C" label) and the search span the
|
||||
* milestone collection, which a single SQL page window cannot express. Move to
|
||||
* a query builder if routes ever grow past a few hundred.
|
||||
*/
|
||||
async findAllPaged(filter: FilterRoutesDto): Promise<PaginatedResponse<Route>> {
|
||||
return paginateArray(await this.findAll(filter), filter);
|
||||
}
|
||||
|
||||
async findById(id: string): Promise<Route> {
|
||||
const route = await this.dataSource.getRepository(Route).findOne({
|
||||
where: { id },
|
||||
|
||||
Reference in New Issue
Block a user