Merge branch 'alpha' of github.com:Tria-plc/edr-platform into alpha

This commit is contained in:
Abubeker Yasin
2026-06-25 14:33:50 +03:00
19 changed files with 239 additions and 141 deletions

View File

@@ -47,7 +47,7 @@ export class BookingsController {
}
@Get('by-device')
@IsPublic()
@SetMetadata('isPublic', true)
@ApiOperation({
summary: 'Get bookings by device ID',
description: 'Returns all bookings associated with a device ID (for guest users). Includes saved passenger details and booking history.'
@@ -76,8 +76,8 @@ export class BookingsController {
}
@Get()
@ApiOperation({
summary: 'List all bookings with filters (Admin/Agent)',
@SetMetadata('isPublic', true)
@ApiOperation({
description: 'Returns paginated list of bookings. Use `returnLegStatus=OUTBOUND_ONLY` to find round-trip no-shows on the return leg, `INBOUND_ONLY` for passengers who only used the return leg, `BOTH_USED` for fully completed round-trips, and `NEITHER_USED` for confirmed but not yet boarded.'
})
@ApiQuery({ name: 'search', required: false, description: 'Search by booking reference, email, or phone' })
@@ -102,7 +102,7 @@ export class BookingsController {
}
@Post('guest')
@IsPublic()
@SetMetadata('isPublic', true)
@ApiOperation({
summary: 'Create guest booking — ONE_WAY | ROUND_TRIP | TRANSIT | ROUND_TRIP_TRANSIT (no login required)',
description: `Creates a booking without requiring login. Supports all four booking types.
@@ -256,7 +256,8 @@ export class BookingsController {
}
@Get('saved-passengers')
@ApiOperation({
@SetMetadata('isPublic', true)
@ApiOperation({
summary: 'Get saved passenger profiles',
description: 'Retrieve saved passenger details by userId (if logged in) or deviceId (for guest users)'
})
@@ -417,8 +418,8 @@ export class BookingsController {
}
@Get(':id/usage')
@ApiOperation({
summary: 'Check if booking is in use',
@SetMetadata('isPublic', true)
@ApiOperation({
description: 'Returns list of modules/data that reference this booking'
})
@ApiResponse({ status: 200, description: 'Usage information retrieved' })
@@ -428,7 +429,8 @@ export class BookingsController {
}
@Get(':bookingRef')
@ApiOperation({
@SetMetadata('isPublic', true)
@ApiOperation({
summary: 'Get booking details by reference (no auth required)',
description: 'Returns booking with passenger categories, Verifayda verification status, and multi-currency amounts. Works for both guest and authenticated bookings.'
})
@@ -452,8 +454,8 @@ export class BookingsController {
}
@Delete(':id')
@ApiOperation({
summary: 'Delete booking (admin only)',
@SetMetadata('isPublic', true)
@ApiOperation({
description: 'Permanently deletes a booking record'
})
@ApiResponse({ status: 200, description: 'Booking deleted successfully' })
@@ -463,8 +465,8 @@ export class BookingsController {
}
@Patch(':id')
@ApiOperation({
summary: 'Update booking details',
@SetMetadata('isPublic', true)
@ApiOperation({
description: 'Updates booking information for admin/agent operations'
})
@ApiResponse({ status: 200, description: 'Booking updated successfully' })

View File

@@ -1032,9 +1032,10 @@ export class BookingsService {
);
}
async getByRef(bookingRef: string) {
async getByRef(bookingRefOrId: string) {
const isUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(bookingRefOrId);
const booking = await this.prisma.booking.findUnique({
where: { bookingRef },
where: isUuid ? { id: bookingRefOrId } : { bookingRef: bookingRefOrId },
include: {
schedule: { include: { originStation: true, destinationStation: true, train: true } },
seats: { include: { seat: { include: { coach: { include: { coachType: { include: { seatClasses: true } } } } } } } },