fix(SPG-1044): validate split QR when phone and username exist
parent
cb452cf5f3
commit
4eedca12e7
|
@ -1,4 +1,8 @@
|
||||||
import { Injectable } from '@nestjs/common';
|
import {
|
||||||
|
HttpStatus,
|
||||||
|
Injectable,
|
||||||
|
UnprocessableEntityException,
|
||||||
|
} from '@nestjs/common';
|
||||||
import {
|
import {
|
||||||
EventTopics,
|
EventTopics,
|
||||||
columnUniques,
|
columnUniques,
|
||||||
|
@ -9,11 +13,15 @@ import { BaseCreateManager } from 'src/core/modules/domain/usecase/managers/base
|
||||||
import { QueueOrderModel } from '../../data/models/queue.model';
|
import { QueueOrderModel } from '../../data/models/queue.model';
|
||||||
import { SplitQueueDto } from '../../infrastructure/controllers/dto/split-queue.dto';
|
import { SplitQueueDto } from '../../infrastructure/controllers/dto/split-queue.dto';
|
||||||
import { QueueService } from '../../data/services/queue.service';
|
import { QueueService } from '../../data/services/queue.service';
|
||||||
|
import { TicketDataService } from '../../data/services/ticket.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SplitQueueManager extends BaseCreateManager<QueueOrderModel> {
|
export class SplitQueueManager extends BaseCreateManager<QueueOrderModel> {
|
||||||
private dto: SplitQueueDto;
|
private dto: SplitQueueDto;
|
||||||
constructor(private readonly queueService: QueueService) {
|
constructor(
|
||||||
|
private readonly queueService: QueueService,
|
||||||
|
private readonly ticketService: TicketDataService,
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +29,25 @@ export class SplitQueueManager extends BaseCreateManager<QueueOrderModel> {
|
||||||
this.dto = dto;
|
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 { tickets, ...order } = this.data;
|
||||||
const ticket = tickets[0];
|
const ticket = tickets[0];
|
||||||
const items = tickets
|
const items = tickets
|
||||||
|
@ -29,6 +55,7 @@ export class SplitQueueManager extends BaseCreateManager<QueueOrderModel> {
|
||||||
return ticket.items;
|
return ticket.items;
|
||||||
})
|
})
|
||||||
.flat();
|
.flat();
|
||||||
|
const postfix = existTickets.length;
|
||||||
this.data = {
|
this.data = {
|
||||||
code: order.code,
|
code: order.code,
|
||||||
customer: this.dto.name,
|
customer: this.dto.name,
|
||||||
|
@ -37,7 +64,7 @@ export class SplitQueueManager extends BaseCreateManager<QueueOrderModel> {
|
||||||
updated_at: new Date().getTime(),
|
updated_at: new Date().getTime(),
|
||||||
tickets: [
|
tickets: [
|
||||||
{
|
{
|
||||||
code: `${order.code}-1`,
|
code: `${order.code}-${postfix}`,
|
||||||
customer: this.dto.name,
|
customer: this.dto.name,
|
||||||
phone: this.dto.phone,
|
phone: this.dto.phone,
|
||||||
date: ticket.date,
|
date: ticket.date,
|
||||||
|
|
Loading…
Reference in New Issue