From af9818d44c49f5c3f31c547a7893149cd6f0291d Mon Sep 17 00:00:00 2001 From: shancheas Date: Wed, 13 Nov 2024 15:48:54 +0700 Subject: [PATCH] feat: cancel order, delete queue --- .../queue/data/services/queue-bucket.ts | 2 +- .../queue/data/services/ticket.service.ts | 23 +++++++++++++++++++ .../handlers/cancel-transaction.handler.ts | 21 +++++++++++++++++ src/modules/queue/queue.module.ts | 2 ++ .../usecases/calculator/price.calculator.ts | 2 +- 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/modules/queue/infrastructure/handlers/cancel-transaction.handler.ts diff --git a/src/modules/queue/data/services/queue-bucket.ts b/src/modules/queue/data/services/queue-bucket.ts index c261739..0042c4a 100644 --- a/src/modules/queue/data/services/queue-bucket.ts +++ b/src/modules/queue/data/services/queue-bucket.ts @@ -41,7 +41,7 @@ export class QueueBucketReadService extends BaseReadService { if (!queue) { const regularNumber = vip ? 0 : 1; const vipNumber = vip ? 1 : 0; - this.repo.save({ + await this.repo.save({ queue_item_id: queueItem.item.item_queue_id ?? queueItem.item.id, date: start, regular: regularNumber, diff --git a/src/modules/queue/data/services/ticket.service.ts b/src/modules/queue/data/services/ticket.service.ts index 0aa8b8f..7d85aac 100644 --- a/src/modules/queue/data/services/ticket.service.ts +++ b/src/modules/queue/data/services/ticket.service.ts @@ -70,6 +70,29 @@ export class TicketDataService extends BaseDataService { return [order]; } + async transactions(transaction_id: string): Promise { + const order = await this.order.findOneOrFail({ + where: { + transaction_id, + }, + }); + + if (order.transaction_id != null) { + return this.order.find({ + where: { + code: order.code, + }, + }); + } + + return [order]; + } + + async deleteQueue(transaction_id: string): Promise { + const transactions = await this.transactions(transaction_id); + await this.order.remove(transactions); + } + async orderIds(order_id: string): Promise { const orders = await this.orders(order_id); diff --git a/src/modules/queue/infrastructure/handlers/cancel-transaction.handler.ts b/src/modules/queue/infrastructure/handlers/cancel-transaction.handler.ts new file mode 100644 index 0000000..84505cb --- /dev/null +++ b/src/modules/queue/infrastructure/handlers/cancel-transaction.handler.ts @@ -0,0 +1,21 @@ +import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; +import { TransactionChangeStatusEvent } from 'src/modules/transaction/transaction/domain/entities/event/transaction-change-status.event'; +import { TicketDataService } from '../../data/services/ticket.service'; + +@EventsHandler(TransactionChangeStatusEvent) +export class QueueTransactionCancelHandler + implements IEventHandler +{ + constructor(private queueService: TicketDataService) {} + + async handle(event: TransactionChangeStatusEvent) { + const process_data = event.data.data; + + /** + * If data still in process (not settled) then don't create the queue order + */ + if (!['cancel', 'rejected'].includes(process_data?.status)) return; + + this.queueService.deleteQueue(event.data.id); + } +} diff --git a/src/modules/queue/queue.module.ts b/src/modules/queue/queue.module.ts index 8dc43c9..d6dee2a 100644 --- a/src/modules/queue/queue.module.ts +++ b/src/modules/queue/queue.module.ts @@ -31,6 +31,7 @@ import { RegisterQueueManager } from './domain/usecases/register-queue.manager'; import { QueueBucketModel } from './data/models/queue-bucket.model'; import { QueueBucketReadService } from './data/services/queue-bucket'; import { SplitQueueManager } from './domain/usecases/split-queue.manager'; +import { QueueTransactionCancelHandler } from './infrastructure/handlers/cancel-transaction.handler'; @Module({ imports: [ @@ -55,6 +56,7 @@ import { SplitQueueManager } from './domain/usecases/split-queue.manager'; QueueAdminOrchestrator, QueueTransactionHandler, + QueueTransactionCancelHandler, TransactionDataService, TicketDataService, diff --git a/src/modules/transaction/transaction/domain/usecases/calculator/price.calculator.ts b/src/modules/transaction/transaction/domain/usecases/calculator/price.calculator.ts index 72b8ce8..1148789 100644 --- a/src/modules/transaction/transaction/domain/usecases/calculator/price.calculator.ts +++ b/src/modules/transaction/transaction/domain/usecases/calculator/price.calculator.ts @@ -133,7 +133,7 @@ export class PriceCalculator { calledVariable = []; } catch (error) { calledVariable.push(valueFor); - console.log(error); + console.log(error.message); } values[valueFor] = result;