From 4eedca12e77ade84d2ef6a85f07f78cc37f997a2 Mon Sep 17 00:00:00 2001 From: shancheas Date: Thu, 21 Nov 2024 11:31:29 +0700 Subject: [PATCH] fix(SPG-1044): validate split QR when phone and username exist --- .../domain/usecases/split-queue.manager.ts | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/modules/queue/domain/usecases/split-queue.manager.ts b/src/modules/queue/domain/usecases/split-queue.manager.ts index c8a3c2c..6b67bd9 100644 --- a/src/modules/queue/domain/usecases/split-queue.manager.ts +++ b/src/modules/queue/domain/usecases/split-queue.manager.ts @@ -1,4 +1,8 @@ -import { Injectable } from '@nestjs/common'; +import { + HttpStatus, + Injectable, + UnprocessableEntityException, +} from '@nestjs/common'; import { EventTopics, columnUniques, @@ -9,11 +13,15 @@ import { BaseCreateManager } from 'src/core/modules/domain/usecase/managers/base import { QueueOrderModel } from '../../data/models/queue.model'; import { SplitQueueDto } from '../../infrastructure/controllers/dto/split-queue.dto'; import { QueueService } from '../../data/services/queue.service'; +import { TicketDataService } from '../../data/services/ticket.service'; @Injectable() export class SplitQueueManager extends BaseCreateManager { private dto: SplitQueueDto; - constructor(private readonly queueService: QueueService) { + constructor( + private readonly queueService: QueueService, + private readonly ticketService: TicketDataService, + ) { super(); } @@ -21,7 +29,25 @@ export class SplitQueueManager extends BaseCreateManager { this.dto = dto; } - prepareData(): Promise { + async validateProcess(): Promise { + await super.validateProcess(); + const existTickets = await this.ticketService.ticketByUser( + this.dto.name, + this.dto.phone, + ); + if (existTickets) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + code: 20002, + message: + 'Antrian dengan nama dan nomor telepon sudah terdaftar, silahkan gunakan nomor telepon atau nama lain', + error: 'QUEUE_ALREADY_EXIST', + }); + } + } + + async prepareData(): Promise { + const existTickets = await this.ticketService.ticketByCode(this.data.code); const { tickets, ...order } = this.data; const ticket = tickets[0]; const items = tickets @@ -29,6 +55,7 @@ export class SplitQueueManager extends BaseCreateManager { return ticket.items; }) .flat(); + const postfix = existTickets.length; this.data = { code: order.code, customer: this.dto.name, @@ -37,7 +64,7 @@ export class SplitQueueManager extends BaseCreateManager { updated_at: new Date().getTime(), tickets: [ { - code: `${order.code}-1`, + code: `${order.code}-${postfix}`, customer: this.dto.name, phone: this.dto.phone, date: ticket.date,