@@ -9,6 +9,7 @@ import { UserService } from '../../user/service/user.service';
99import { BookingAdmissionStatusDto } from '../dto/bookingAdmissionStatus.dto' ;
1010import { ServerTimeDto } from '../dto/serverTime.dto' ;
1111
12+ import { BookingSeatsService } from './booking-seats.service' ;
1213import { EnterBookingService } from './enter-booking.service' ;
1314import { InBookingService } from './in-booking.service' ;
1415import { OpenBookingService } from './open-booking.service' ;
@@ -24,6 +25,7 @@ export class BookingService {
2425 private readonly redisService : RedisService ,
2526 private readonly eventService : EventService ,
2627 private readonly authService : AuthService ,
28+ private readonly bookingSeatsService : BookingSeatsService ,
2729 private readonly inBookingService : InBookingService ,
2830 private readonly openBookingService : OpenBookingService ,
2931 private readonly waitingQueueService : WaitingQueueService ,
@@ -35,11 +37,25 @@ export class BookingService {
3537
3638 @OnEvent ( 'seats-sse-close' )
3739 async onSeatsSseDisconnected ( event : { sid : string } ) {
38- const eventId = await this . userService . getUserEventTarget ( event . sid ) ;
39- await this . inBookingService . emitSession ( event . sid ) ;
40+ const sid = event . sid ;
41+ const eventId = await this . userService . getUserEventTarget ( sid ) ;
42+ await this . collectSeatsIfNotSaved ( eventId , sid ) ;
43+ await this . inBookingService . emitSession ( sid ) ;
4044 await this . letInNextWaiting ( eventId ) ;
4145 }
4246
47+ private async collectSeatsIfNotSaved ( eventId : number , sid : string ) {
48+ const inBookingSession = await this . inBookingService . getSession ( eventId , sid ) ;
49+ if ( inBookingSession && ! inBookingSession . saved ) {
50+ const bookedSeats = inBookingSession . bookedSeats ;
51+ bookedSeats . forEach ( ( seat ) => {
52+ this . bookingSeatsService . updateSeatDeleted ( eventId , seat ) ;
53+ } ) ;
54+ inBookingSession . bookedSeats = [ ] ;
55+ await this . inBookingService . setSession ( eventId , inBookingSession ) ;
56+ }
57+ }
58+
4359 @OnEvent ( 'entering-sessions-gc' )
4460 async onEnteringSessionsGc ( event : { eventId : number } ) {
4561 await this . letInNextWaiting ( event . eventId ) ;
0 commit comments