feat: add list order queue
continuous-integration/drone/push Build is passing Details

pull/115/head
shancheas 2024-10-29 14:15:37 +07:00
parent 93b1208278
commit c8d0b32cc6
6 changed files with 79 additions and 1 deletions

View File

@ -4,7 +4,11 @@ import { InjectRepository } from '@nestjs/typeorm';
import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants';
import { Repository } from 'typeorm';
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';
@Injectable()
@ -15,6 +19,9 @@ export class TicketDataService extends BaseDataService<QueueTicket> {
@InjectRepository(QueueOrderModel, CONNECTION_NAME.DEFAULT)
private order: Repository<QueueOrderModel>,
@InjectRepository(QueueItemModel, CONNECTION_NAME.DEFAULT)
private item: Repository<QueueItemModel>,
) {
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,
},
},
});
}
}

View File

@ -10,6 +10,7 @@ import { CustomerQueueSummaryManager } from './usecases/queue/customer-queue-sum
import { CustomerQueueDetailManager } from './usecases/queue/customer-queue-detail.manager';
import { CustomerQueueItemManager } from './usecases/queue/customer-queue-item.manager';
import { CustomerQueueItemListManager } from './usecases/queue/customer-queue-item-list.manager';
import { CustomerQueueListManager } from './usecases/queue/customer-queue-list.manager';
@Injectable()
export class QueueOrchestrator {
@ -71,4 +72,10 @@ export class QueueOrchestrator {
const manager = new CustomerQueueItemListManager(tickets);
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;
}
}

View File

@ -28,6 +28,7 @@ export class CustomerQueueItemListManager extends CustomerQueueManager {
nearest: '13:10',
crowded_level: 20,
available_time: '15:00',
queue_condition: {
available: true,
average: 12,

View File

@ -10,6 +10,7 @@ export class CustomerQueueItemManager extends CustomerQueueManager {
customer: ticket.customer,
phone: ticket.phone,
date: ticket.date,
image_url: item.item.image_url,
summary: {
total_activities: this.totalActivities(ticket),
total_tickets: this.totalTickets(ticket),

View File

@ -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,
};
}),
};
}),
};
});
}
}

View File

@ -44,6 +44,11 @@ export class QueueController {
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')
async queueItemTickets(
@Param('id') id: string,