fix(SPG-1044): validate split QR when phone and username exist
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details

pull/115/head 1.2.8-alpha.1
shancheas 2024-11-21 11:31:29 +07:00
parent cb452cf5f3
commit 4eedca12e7
1 changed files with 31 additions and 4 deletions

View File

@ -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<QueueOrderModel> {
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<QueueOrderModel> {
this.dto = dto;
}
prepareData(): Promise<void> {
async validateProcess(): Promise<void> {
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<void> {
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<QueueOrderModel> {
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<QueueOrderModel> {
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,