diff --git a/src/modules/queue/data/services/ticket.service.ts b/src/modules/queue/data/services/ticket.service.ts index 0014ef5..2d11cee 100644 --- a/src/modules/queue/data/services/ticket.service.ts +++ b/src/modules/queue/data/services/ticket.service.ts @@ -128,6 +128,25 @@ export class TicketDataService extends BaseDataService { }); } + async queueTicketActive( + order_id: string, + ticket_id: string, + ): Promise { + 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, diff --git a/src/modules/queue/domain/queue.orchestrator.ts b/src/modules/queue/domain/queue.orchestrator.ts index d600c31..98050f2 100644 --- a/src/modules/queue/domain/queue.orchestrator.ts +++ b/src/modules/queue/domain/queue.orchestrator.ts @@ -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 { + 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 { const tickets = await this.dataService.queueItemTickets(order_id, item_id); const manager = new CustomerQueueItemManager(tickets); diff --git a/src/modules/queue/domain/usecases/queue/customer-queue-ticket.manager.ts b/src/modules/queue/domain/usecases/queue/customer-queue-ticket.manager.ts new file mode 100644 index 0000000..d2bbf14 --- /dev/null +++ b/src/modules/queue/domain/usecases/queue/customer-queue-ticket.manager.ts @@ -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]; + } +} diff --git a/src/modules/queue/infrastructure/controllers/queue.controller.ts b/src/modules/queue/infrastructure/controllers/queue.controller.ts index 34a85af..982c994 100644 --- a/src/modules/queue/infrastructure/controllers/queue.controller.ts +++ b/src/modules/queue/infrastructure/controllers/queue.controller.ts @@ -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 { + return await this.orchestrator.queueTicketSummary(id, ticket_id); + } + @Get(':id/items') async queueItems(@Param('id') id: string): Promise { return await this.orchestrator.queueItems(id);