mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-27 22:30:55 +00:00
65 lines
2.5 KiB
TypeScript
65 lines
2.5 KiB
TypeScript
import { Body, Controller, Get, Param, ParseUUIDPipe, Patch, Post, Query } from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
|
|
|
|
import { BookingStaff } from '../../common/booking-guards';
|
|
import { FREIGHT_PERMS } from '../../seed/freight-permissions.registry';
|
|
import { GenerateFromScheduleDto } from './dto/generate-from-schedule.dto';
|
|
import { InterchangeDocumentQueryDto } from './dto/interchange-document-query.dto';
|
|
import {
|
|
AcknowledgeInterchangeDocumentDto,
|
|
DisputeInterchangeDocumentDto,
|
|
} from './dto/update-interchange-document-status.dto';
|
|
import { InterchangeDocumentsService } from './interchange-documents.service';
|
|
|
|
@ApiTags('interchange-documents')
|
|
@ApiBearerAuth()
|
|
@Controller('interchange-documents')
|
|
// Class-level view guard; each write route adds its own manage permission below.
|
|
@BookingStaff(FREIGHT_PERMS.interchangeDocuments.view)
|
|
export class InterchangeDocumentsController {
|
|
constructor(private readonly service: InterchangeDocumentsService) {}
|
|
|
|
@Get()
|
|
@ApiOperation({ summary: 'List interchange documents' })
|
|
findAll(@Query() query: InterchangeDocumentQueryDto) {
|
|
return this.service.findAll(query);
|
|
}
|
|
|
|
@Get(':id')
|
|
@ApiOperation({ summary: 'Get interchange document detail' })
|
|
findOne(@Param('id', ParseUUIDPipe) id: string) {
|
|
return this.service.findOne(id);
|
|
}
|
|
|
|
@Post('generate-from-schedule')
|
|
@BookingStaff(FREIGHT_PERMS.interchangeDocuments.generate)
|
|
@ApiOperation({ summary: 'Generate interchange document from a train schedule handover' })
|
|
generateFromSchedule(@Body() dto: GenerateFromScheduleDto) {
|
|
return this.service.generateFromSchedule(dto);
|
|
}
|
|
|
|
@Patch(':id/acknowledge')
|
|
@BookingStaff(FREIGHT_PERMS.interchangeDocuments.acknowledge)
|
|
@ApiOperation({ summary: 'Acknowledge an interchange document' })
|
|
acknowledge(
|
|
@Param('id', ParseUUIDPipe) id: string,
|
|
@Body() dto: AcknowledgeInterchangeDocumentDto,
|
|
) {
|
|
return this.service.acknowledge(id, dto);
|
|
}
|
|
|
|
@Patch(':id/dispute')
|
|
@BookingStaff(FREIGHT_PERMS.interchangeDocuments.dispute)
|
|
@ApiOperation({ summary: 'Dispute an interchange document' })
|
|
dispute(@Param('id', ParseUUIDPipe) id: string, @Body() dto: DisputeInterchangeDocumentDto) {
|
|
return this.service.dispute(id, dto);
|
|
}
|
|
|
|
@Patch(':id/cancel')
|
|
@BookingStaff(FREIGHT_PERMS.interchangeDocuments.cancel)
|
|
@ApiOperation({ summary: 'Cancel a draft/generated interchange document' })
|
|
cancel(@Param('id', ParseUUIDPipe) id: string) {
|
|
return this.service.cancel(id);
|
|
}
|
|
}
|