diff --git a/src/modules/queue/data/services/ticket.service.ts b/src/modules/queue/data/services/ticket.service.ts index 7d509e3..4f1cd66 100644 --- a/src/modules/queue/data/services/ticket.service.ts +++ b/src/modules/queue/data/services/ticket.service.ts @@ -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 { @InjectRepository(QueueOrderModel, CONNECTION_NAME.DEFAULT) private order: Repository, + + @InjectRepository(QueueItemModel, CONNECTION_NAME.DEFAULT) + private item: Repository, ) { super(repo); } @@ -81,4 +88,15 @@ export class TicketDataService extends BaseDataService { }, }); } + + async queueItems(order_id: string): Promise { + return this.item.find({ + relations: ['queue', 'ticket'], + where: { + ticket: { + order_id, + }, + }, + }); + } } diff --git a/src/modules/queue/domain/queue.orchestrator.ts b/src/modules/queue/domain/queue.orchestrator.ts index aa61f48..be8f5fe 100644 --- a/src/modules/queue/domain/queue.orchestrator.ts +++ b/src/modules/queue/domain/queue.orchestrator.ts @@ -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 { + const tickets = await this.dataService.queueTickets(order_id); + const manager = new CustomerQueueListManager(tickets); + return manager.data; + } } diff --git a/src/modules/queue/domain/usecases/queue/customer-queue-item-list.manager.ts b/src/modules/queue/domain/usecases/queue/customer-queue-item-list.manager.ts index 8f0bd69..7692acf 100644 --- a/src/modules/queue/domain/usecases/queue/customer-queue-item-list.manager.ts +++ b/src/modules/queue/domain/usecases/queue/customer-queue-item-list.manager.ts @@ -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, diff --git a/src/modules/queue/domain/usecases/queue/customer-queue-item.manager.ts b/src/modules/queue/domain/usecases/queue/customer-queue-item.manager.ts index af4aa9d..2e85a5d 100644 --- a/src/modules/queue/domain/usecases/queue/customer-queue-item.manager.ts +++ b/src/modules/queue/domain/usecases/queue/customer-queue-item.manager.ts @@ -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), diff --git a/src/modules/queue/domain/usecases/queue/customer-queue-list.manager.ts b/src/modules/queue/domain/usecases/queue/customer-queue-list.manager.ts new file mode 100644 index 0000000..849eea6 --- /dev/null +++ b/src/modules/queue/domain/usecases/queue/customer-queue-list.manager.ts @@ -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(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, + }; + }), + }; + }), + }; + }); + } +} diff --git a/src/modules/queue/infrastructure/controllers/queue.controller.ts b/src/modules/queue/infrastructure/controllers/queue.controller.ts index 8019e1c..7d382dc 100644 --- a/src/modules/queue/infrastructure/controllers/queue.controller.ts +++ b/src/modules/queue/infrastructure/controllers/queue.controller.ts @@ -44,6 +44,11 @@ export class QueueController { return await this.orchestrator.queueItems(id); } + @Get(':id/queue') + async queueOrderItems(@Param('id') id: string): Promise { + return await this.orchestrator.queueOrderItems(id); + } + @Get(':id/items/:item_id') async queueItemTickets( @Param('id') id: string,