feat: add queue active summary
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details

pull/115/head 20.2.9-alpha.1
shancheas 2024-11-05 14:43:04 +07:00
parent ba7b81c320
commit 5ef7521e9b
4 changed files with 61 additions and 0 deletions

View File

@ -128,6 +128,25 @@ export class TicketDataService extends BaseDataService<QueueTicket> {
});
}
async queueTicketActive(
order_id: string,
ticket_id: string,
): Promise<QueueTicketModel[]> {
const order = await this.orderIds(order_id);
return this.repo.find({
relations: ['items', 'items.queue'],
where: {
order_id: In(order),
id: ticket_id,
items: {
queue: {
status: In(['waiting']),
},
},
},
});
}
async queueItemTickets(
order_id: string,
item_id: string,

View File

@ -18,6 +18,7 @@ import { SplitQueueDto } from '../infrastructure/controllers/dto/split-queue.dto
import { SplitQueueManager } from './usecases/split-queue.manager';
import { LoginQueueDto } from '../infrastructure/controllers/dto/login-queue.dto';
import * as moment from 'moment';
import { CustomerQueueTicketSummaryManager } from './usecases/queue/customer-queue-ticket.manager';
@Injectable()
export class QueueOrchestrator {
@ -97,6 +98,16 @@ export class QueueOrchestrator {
return manager.data;
}
async queueTicketSummary(order_id: string, ticket_id: string): Promise<any> {
const tickets = await this.dataService.queueTicketActive(
order_id,
ticket_id,
);
const manager = new CustomerQueueTicketSummaryManager(tickets);
return manager.data;
}
async queueItemDetail(order_id: string, item_id: string): Promise<any> {
const tickets = await this.dataService.queueItemTickets(order_id, item_id);
const manager = new CustomerQueueItemManager(tickets);

View File

@ -0,0 +1,23 @@
import { CustomerQueueManager } from './customer-queue.manager';
export class CustomerQueueTicketSummaryManager extends CustomerQueueManager {
get data() {
const tickets = this.tickets.map((ticket) => {
return {
id: ticket.id,
code: ticket.code,
customer: ticket.customer,
phone: ticket.phone,
date: ticket.date,
summary: {
total_activities: this.totalActivities(ticket),
total_tickets: this.totalTickets(ticket),
total_used: this.totalUsedTickets(ticket),
total_queue: this.totalQueueTickets(ticket),
},
};
});
return tickets[0];
}
}

View File

@ -51,6 +51,14 @@ export class QueueController {
return await this.orchestrator.queueTicketDetail(id, ticket_id);
}
@Get(':id/tickets/:ticket_id/summary')
async queueTicketActive(
@Param('id') id: string,
@Param('ticket_id') ticket_id: string,
): Promise<void> {
return await this.orchestrator.queueTicketSummary(id, ticket_id);
}
@Get(':id/items')
async queueItems(@Param('id') id: string): Promise<void> {
return await this.orchestrator.queueItems(id);