From 2632e2d50ca8f77b9fb8da86db3abe54299cb70b Mon Sep 17 00:00:00 2001 From: Stephanos A Date: Wed, 22 Jul 2026 14:06:00 +0300 Subject: [PATCH] Ticketing updates --- .../src/modules/bookings/bookings.service.ts | 31 +++++++++++-------- .../src/modules/tickets/tickets.service.ts | 2 +- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/apps/edr-passenger-api/src/modules/bookings/bookings.service.ts b/apps/edr-passenger-api/src/modules/bookings/bookings.service.ts index 2c4d2cee4..8b37f9841 100644 --- a/apps/edr-passenger-api/src/modules/bookings/bookings.service.ts +++ b/apps/edr-passenger-api/src/modules/bookings/bookings.service.ts @@ -1916,21 +1916,26 @@ export class BookingsService { ) { try { await this.ticketsService.generate(booking.id); - // Re-fetch to include the newly created tickets - const refreshed = await this.prisma.booking.findUnique({ - where: { id: booking.id }, - include: { - schedule: { include: { originStation: true, destinationStation: true, train: true, stopTimes: { include: { station: true } } } }, - returnSchedule: { include: { originStation: true, destinationStation: true, train: true, stopTimes: { include: { station: true } } } }, - seats: { include: { seat: { include: { coach: { include: { coachType: { include: { seatClasses: true } } } } } } } }, - paymentIntent: true, tickets: true, - priceTier: { select: { priceMinor: true } }, - }, - }); - if (refreshed) Object.assign(booking, refreshed); } catch (err) { - this.logger.warn(`getByRef: auto-generate tickets failed for booking ${booking.id}: ${err instanceof Error ? err.message : String(err)}`); + this.logger.warn(`getByRef: generate failed for booking ${booking.id}: ${err instanceof Error ? err.message : String(err)}. Trying smart assign.`); + try { + await this.ticketsService.smartAssignAndGenerate(booking.id); + } catch (retryErr) { + this.logger.error(`getByRef: smart assign also failed for booking ${booking.id}: ${retryErr instanceof Error ? retryErr.message : String(retryErr)}`); + } } + // Re-fetch to include any newly created tickets + const refreshed = await this.prisma.booking.findUnique({ + where: { id: booking.id }, + include: { + schedule: { include: { originStation: true, destinationStation: true, train: true, stopTimes: { include: { station: true } } } }, + returnSchedule: { include: { originStation: true, destinationStation: true, train: true, stopTimes: { include: { station: true } } } }, + seats: { include: { seat: { include: { coach: { include: { coachType: { include: { seatClasses: true } } } } } } } }, + paymentIntent: true, tickets: true, + priceTier: { select: { priceMinor: true } }, + }, + }); + if (refreshed) Object.assign(booking, refreshed); } const outboundSegment = this.resolveSegmentStations( diff --git a/apps/edr-passenger-api/src/modules/tickets/tickets.service.ts b/apps/edr-passenger-api/src/modules/tickets/tickets.service.ts index 2ba05dd4e..b788c03df 100644 --- a/apps/edr-passenger-api/src/modules/tickets/tickets.service.ts +++ b/apps/edr-passenger-api/src/modules/tickets/tickets.service.ts @@ -360,7 +360,7 @@ export class TicketsService { // blocked by another booking. const seatIds = (booking as any).seats.map((bs: any) => bs.seatId); await this.prisma.seatBlock.deleteMany({ - where: { seatId: { in: seatIds }, blockedBy: 'SYSTEM', approvedBy: 'SYSTEM' }, + where: { seatId: { in: seatIds }, blockedBy: 'SYSTEM' }, }); // Check for seat conflicts — only seats confirmed/boarded by a *different* booking