mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-09-08 14:48:18 +00:00
83 lines
3.3 KiB
TypeScript
83 lines
3.3 KiB
TypeScript
import { Body, Controller, Delete, Get, Param, Patch, Post, Req, UseGuards } from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
|
|
import { JwtGuard } from '../../common/jwt.guard';
|
|
import { PassengerAdmin, PassengerStaff } from '../../common/passenger-guards';
|
|
import { PASSENGER_PERMS } from '../../seed/passenger-permissions.registry';
|
|
import { RescheduleService } from './reschedule.service';
|
|
import {
|
|
CreateReschedulePolicyDto,
|
|
CreateRescheduleDto,
|
|
RescheduleQuoteDto,
|
|
UpdateReschedulePolicyDto,
|
|
} from './reschedule.dto';
|
|
|
|
@ApiTags('Reschedule')
|
|
@Controller()
|
|
export class RescheduleController {
|
|
constructor(private service: RescheduleService) {}
|
|
|
|
@Get('reschedule/policies')
|
|
@PassengerStaff(PASSENGER_PERMS.bookings.view)
|
|
@ApiBearerAuth('JWT-auth')
|
|
@ApiOperation({ summary: 'Every reschedule policy, each with its coach type (fare class)' })
|
|
listPolicies() {
|
|
return this.service.listPolicies();
|
|
}
|
|
|
|
@Get('reschedule/policies/available-coach-types')
|
|
@PassengerStaff(PASSENGER_PERMS.bookings.view)
|
|
@ApiBearerAuth('JWT-auth')
|
|
@ApiOperation({ summary: 'Coach types that do not have a reschedule policy yet (add-dialog dropdown)' })
|
|
listUnconfiguredCoachTypes() {
|
|
return this.service.listUnconfiguredCoachTypes();
|
|
}
|
|
|
|
@Post('reschedule/policies')
|
|
@PassengerAdmin()
|
|
@ApiBearerAuth('JWT-auth')
|
|
@ApiOperation({ summary: 'Create a reschedule policy for a coach type (admin)' })
|
|
createPolicy(@Req() req: any, @Body() dto: CreateReschedulePolicyDto) {
|
|
return this.service.createPolicy(dto, req.user?.id);
|
|
}
|
|
|
|
@Patch('reschedule/policies/:coachTypeId')
|
|
@PassengerAdmin()
|
|
@ApiBearerAuth('JWT-auth')
|
|
@ApiOperation({ summary: 'Update the reschedule policy of a coach type (admin)' })
|
|
updatePolicy(@Req() req: any, @Param('coachTypeId') coachTypeId: string, @Body() dto: UpdateReschedulePolicyDto) {
|
|
return this.service.updatePolicy(coachTypeId, dto, req.user?.id);
|
|
}
|
|
|
|
@Delete('reschedule/policies/:coachTypeId')
|
|
@PassengerAdmin()
|
|
@ApiBearerAuth('JWT-auth')
|
|
@ApiOperation({ summary: 'Delete a reschedule policy — rescheduling is then refused for that fare class (admin)' })
|
|
deletePolicy(@Req() req: any, @Param('coachTypeId') coachTypeId: string) {
|
|
return this.service.deletePolicy(coachTypeId, req.user?.id);
|
|
}
|
|
|
|
@Get('bookings/:bookingRef/reschedule')
|
|
@UseGuards(JwtGuard)
|
|
@ApiBearerAuth('JWT-auth')
|
|
@ApiOperation({ summary: 'Reschedule eligibility per leg, pending request, history' })
|
|
options(@Req() req: any, @Param('bookingRef') bookingRef: string) {
|
|
return this.service.getOptions(bookingRef, req.user);
|
|
}
|
|
|
|
@Post('bookings/:bookingRef/reschedule/quote')
|
|
@UseGuards(JwtGuard)
|
|
@ApiBearerAuth('JWT-auth')
|
|
@ApiOperation({ summary: 'Itemised quote (fee, fare difference, amount due) for a proposed change' })
|
|
quote(@Req() req: any, @Param('bookingRef') bookingRef: string, @Body() dto: RescheduleQuoteDto) {
|
|
return this.service.quote(bookingRef, dto, req.user);
|
|
}
|
|
|
|
@Post('bookings/:bookingRef/reschedule')
|
|
@UseGuards(JwtGuard)
|
|
@ApiBearerAuth('JWT-auth')
|
|
@ApiOperation({ summary: 'Reschedule a leg. Applies immediately when nothing is due, otherwise returns a payment token' })
|
|
create(@Req() req: any, @Param('bookingRef') bookingRef: string, @Body() dto: CreateRescheduleDto) {
|
|
return this.service.create(bookingRef, dto, req.user);
|
|
}
|
|
}
|