feat: add list order queue
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
93b1208278
commit
c8d0b32cc6
|
@ -4,7 +4,11 @@ import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants';
|
import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants';
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
import { QueueTicket } from '../../domain/entities/ticket.entity';
|
import { QueueTicket } from '../../domain/entities/ticket.entity';
|
||||||
import { QueueOrderModel, QueueTicketModel } from '../models/queue.model';
|
import {
|
||||||
|
QueueItemModel,
|
||||||
|
QueueOrderModel,
|
||||||
|
QueueTicketModel,
|
||||||
|
} from '../models/queue.model';
|
||||||
import { QueueOrder } from '../../domain/entities/order.entity';
|
import { QueueOrder } from '../../domain/entities/order.entity';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
|
@ -15,6 +19,9 @@ export class TicketDataService extends BaseDataService<QueueTicket> {
|
||||||
|
|
||||||
@InjectRepository(QueueOrderModel, CONNECTION_NAME.DEFAULT)
|
@InjectRepository(QueueOrderModel, CONNECTION_NAME.DEFAULT)
|
||||||
private order: Repository<QueueOrderModel>,
|
private order: Repository<QueueOrderModel>,
|
||||||
|
|
||||||
|
@InjectRepository(QueueItemModel, CONNECTION_NAME.DEFAULT)
|
||||||
|
private item: Repository<QueueItemModel>,
|
||||||
) {
|
) {
|
||||||
super(repo);
|
super(repo);
|
||||||
}
|
}
|
||||||
|
@ -81,4 +88,15 @@ export class TicketDataService extends BaseDataService<QueueTicket> {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async queueItems(order_id: string): Promise<QueueItemModel[]> {
|
||||||
|
return this.item.find({
|
||||||
|
relations: ['queue', 'ticket'],
|
||||||
|
where: {
|
||||||
|
ticket: {
|
||||||
|
order_id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import { CustomerQueueSummaryManager } from './usecases/queue/customer-queue-sum
|
||||||
import { CustomerQueueDetailManager } from './usecases/queue/customer-queue-detail.manager';
|
import { CustomerQueueDetailManager } from './usecases/queue/customer-queue-detail.manager';
|
||||||
import { CustomerQueueItemManager } from './usecases/queue/customer-queue-item.manager';
|
import { CustomerQueueItemManager } from './usecases/queue/customer-queue-item.manager';
|
||||||
import { CustomerQueueItemListManager } from './usecases/queue/customer-queue-item-list.manager';
|
import { CustomerQueueItemListManager } from './usecases/queue/customer-queue-item-list.manager';
|
||||||
|
import { CustomerQueueListManager } from './usecases/queue/customer-queue-list.manager';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class QueueOrchestrator {
|
export class QueueOrchestrator {
|
||||||
|
@ -71,4 +72,10 @@ export class QueueOrchestrator {
|
||||||
const manager = new CustomerQueueItemListManager(tickets);
|
const manager = new CustomerQueueItemListManager(tickets);
|
||||||
return manager.data;
|
return manager.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async queueOrderItems(order_id: string): Promise<any> {
|
||||||
|
const tickets = await this.dataService.queueTickets(order_id);
|
||||||
|
const manager = new CustomerQueueListManager(tickets);
|
||||||
|
return manager.data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ export class CustomerQueueItemListManager extends CustomerQueueManager {
|
||||||
nearest: '13:10',
|
nearest: '13:10',
|
||||||
crowded_level: 20,
|
crowded_level: 20,
|
||||||
available_time: '15:00',
|
available_time: '15:00',
|
||||||
|
|
||||||
queue_condition: {
|
queue_condition: {
|
||||||
available: true,
|
available: true,
|
||||||
average: 12,
|
average: 12,
|
||||||
|
|
|
@ -10,6 +10,7 @@ export class CustomerQueueItemManager extends CustomerQueueManager {
|
||||||
customer: ticket.customer,
|
customer: ticket.customer,
|
||||||
phone: ticket.phone,
|
phone: ticket.phone,
|
||||||
date: ticket.date,
|
date: ticket.date,
|
||||||
|
image_url: item.item.image_url,
|
||||||
summary: {
|
summary: {
|
||||||
total_activities: this.totalActivities(ticket),
|
total_activities: this.totalActivities(ticket),
|
||||||
total_tickets: this.totalTickets(ticket),
|
total_tickets: this.totalTickets(ticket),
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
import { QueueItemModel } from 'src/modules/queue/data/models/queue.model';
|
||||||
|
import { CustomerQueueManager } from './customer-queue.manager';
|
||||||
|
|
||||||
|
export class CustomerQueueListManager extends CustomerQueueManager {
|
||||||
|
get data() {
|
||||||
|
const tickets = this.tickets;
|
||||||
|
const ticketItems = {};
|
||||||
|
|
||||||
|
tickets.forEach((ticket) => {
|
||||||
|
ticket.items.forEach((item) => {
|
||||||
|
const item_id = item.item.item_queue?.id ?? item.item.id;
|
||||||
|
const currentItem = ticketItems[item_id];
|
||||||
|
item.ticket = ticket;
|
||||||
|
ticketItems[item_id] = currentItem ? [...currentItem, item] : [item];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return Object.values<QueueItemModel[]>(ticketItems).map((items) => {
|
||||||
|
const item = items[0];
|
||||||
|
const item_qty = items.reduce((acc, item) => acc + item.qty, 0);
|
||||||
|
return {
|
||||||
|
id: item.item_id,
|
||||||
|
title: item.item.item_queue?.name ?? item.item.name,
|
||||||
|
image_url: item.item.image_url,
|
||||||
|
qty: item_qty,
|
||||||
|
|
||||||
|
items: items.map((item) => {
|
||||||
|
return {
|
||||||
|
code: item.ticket.code,
|
||||||
|
customer: item.ticket.customer,
|
||||||
|
phone: item.ticket.phone,
|
||||||
|
id: item.ticket.id,
|
||||||
|
queue: item.queue.map((q) => {
|
||||||
|
return {
|
||||||
|
code: q.code,
|
||||||
|
qty: q.qty,
|
||||||
|
time: this.toTime(q.time),
|
||||||
|
status: q.status,
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -44,6 +44,11 @@ export class QueueController {
|
||||||
return await this.orchestrator.queueItems(id);
|
return await this.orchestrator.queueItems(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Get(':id/queue')
|
||||||
|
async queueOrderItems(@Param('id') id: string): Promise<void> {
|
||||||
|
return await this.orchestrator.queueOrderItems(id);
|
||||||
|
}
|
||||||
|
|
||||||
@Get(':id/items/:item_id')
|
@Get(':id/items/:item_id')
|
||||||
async queueItemTickets(
|
async queueItemTickets(
|
||||||
@Param('id') id: string,
|
@Param('id') id: string,
|
||||||
|
|
Loading…
Reference in New Issue