From 3b19484f293293dc9802049c5bc63add1b37fe27 Mon Sep 17 00:00:00 2001 From: shancheas Date: Wed, 20 Nov 2024 12:50:58 +0700 Subject: [PATCH] fix(SPG-1030): merge queue when user is exits --- .../queue/data/services/ticket.service.ts | 17 ++++++++++++++ .../handlers/transaction.handler.ts | 22 +++++++++++++++---- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/modules/queue/data/services/ticket.service.ts b/src/modules/queue/data/services/ticket.service.ts index c8275ef..f2bae21 100644 --- a/src/modules/queue/data/services/ticket.service.ts +++ b/src/modules/queue/data/services/ticket.service.ts @@ -31,6 +31,10 @@ export class TicketDataService extends BaseDataService { return await this.order.save(order); } + async updateQueueTicket(ticket: QueueTicket): Promise { + return await this.repo.save(ticket); + } + async loginQueue(id: string): Promise { return this.order.findOneOrFail({ relations: ['tickets'], @@ -52,6 +56,19 @@ export class TicketDataService extends BaseDataService { }); } + async ticketByUser(user: string, phone: string): Promise { + const start = moment().startOf('day').valueOf(); + const end = moment().endOf('day').valueOf(); + + return this.repo.findOne({ + where: { + customer: user, + phone: phone, + date: Between(start, end), + }, + }); + } + async loginPhone(user: string, phone: string): Promise { const start = moment().startOf('day').valueOf(); const end = moment().endOf('day').valueOf(); diff --git a/src/modules/queue/infrastructure/handlers/transaction.handler.ts b/src/modules/queue/infrastructure/handlers/transaction.handler.ts index 2f1ab55..865767f 100644 --- a/src/modules/queue/infrastructure/handlers/transaction.handler.ts +++ b/src/modules/queue/infrastructure/handlers/transaction.handler.ts @@ -64,15 +64,29 @@ export class QueueTransactionHandler }; }); - const ticket: QueueTicket = { ...customerOrder, items }; - const order: QueueOrder = { ...customerOrder, tickets: [ticket] }; + const existTicket = await this.ticketService.ticketByUser( + customer_name, + customer_phone, + ); + + const insertTickets = []; + if (existTicket) { + existTicket.items = items; + insertTickets.push(existTicket); + await this.ticketService.updateQueueTicket(existTicket); + } else { + const ticket: QueueTicket = { ...customerOrder, items }; + const order: QueueOrder = { ...customerOrder, tickets: [ticket] }; + + const queueOrder = await this.ticketService.createQueueOrder(order); + insertTickets.push(...queueOrder.tickets); + } - const queueOrder = await this.ticketService.createQueueOrder(order); if ( transaction.customer_category?.has_vip_pass || transaction.customer_type === TransactionUserType.VIP ) { - queueOrder.tickets.forEach((ticket) => { + insertTickets.forEach((ticket) => { const ticket_id = ticket.id; ticket.items.forEach((item) => { const item_id = item.item_id;