From ac8628918264b4305908344152e84b5a32fb7424 Mon Sep 17 00:00:00 2001 From: shancheas Date: Thu, 24 Oct 2024 13:25:56 +0700 Subject: [PATCH] feat: add detail item ticket --- .../queue/data/services/ticket.service.ts | 13 +++++ .../queue/domain/queue.orchestrator.ts | 56 +++++++++++++++++++ .../controllers/queue.controller.ts | 19 +++---- 3 files changed, 78 insertions(+), 10 deletions(-) diff --git a/src/modules/queue/data/services/ticket.service.ts b/src/modules/queue/data/services/ticket.service.ts index a55a443..f2cc833 100644 --- a/src/modules/queue/data/services/ticket.service.ts +++ b/src/modules/queue/data/services/ticket.service.ts @@ -41,6 +41,19 @@ export class TicketDataService extends BaseDataService { }); } + async queueTicketItems( + order_id: string, + ticket_id: string, + ): Promise { + return this.repo.find({ + relations: ['items', 'items.item', 'items.item.item_queue'], + where: { + order_id, + id: ticket_id, + }, + }); + } + 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 b6169d0..2d40a93 100644 --- a/src/modules/queue/domain/queue.orchestrator.ts +++ b/src/modules/queue/domain/queue.orchestrator.ts @@ -44,6 +44,62 @@ export class QueueOrchestrator { }); } + async queueTicketDetail(order_id: string, ticket_id: string): Promise { + const tickets = await this.dataService.queueTicketItems( + order_id, + ticket_id, + ); + return tickets.map((ticket) => { + const totalActivities = ticket.items.length; + const totalTickets = ticket.items.reduce( + (acc, item) => acc + item.qty, + 0, + ); + const totalUsed = 0; + const totalQueue = 0; + return { + id: ticket.id, + code: ticket.code, + customer: ticket.customer, + phone: ticket.phone, + date: ticket.date, + summary: { + total_activities: totalActivities, + total_tickets: totalTickets, + total_used: totalUsed, + total_queue: totalQueue, + }, + items: ticket.items.map((item) => { + return { + id: item.item_id, + title: item.item.item_queue?.name ?? item.item.name, + image_url: item.item.image_url, + summary: { + total_tickets: item.qty, + total_used: 0, + total_queue: 1, + }, + queue: [ + { + code: 'A001', + qty: 1, + time: '15:00', + status: 'waiting', + }, + ], + queue_condition: { + available: true, + average: 12, + nearest: '13:10', + crowded_level: 20, + available_time: '15:00', + }, + }; + }), + }; + }); + } + async queueItemDetail(order_id: string, item_id: string): Promise { const tickets = await this.dataService.queueItemTickets(order_id, item_id); return tickets.map((ticket) => { diff --git a/src/modules/queue/infrastructure/controllers/queue.controller.ts b/src/modules/queue/infrastructure/controllers/queue.controller.ts index 8158d22..d849b56 100644 --- a/src/modules/queue/infrastructure/controllers/queue.controller.ts +++ b/src/modules/queue/infrastructure/controllers/queue.controller.ts @@ -1,13 +1,4 @@ -import { - Body, - Controller, - Get, - Param, - Patch, - Post, - Put, - Res, -} from '@nestjs/common'; +import { Controller, Get, Param } from '@nestjs/common'; import { MODULE_NAME } from 'src/core/strings/constants/module.constants'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; @@ -33,6 +24,14 @@ export class QueueController { return await this.orchestrator.queueTickets(id); } + @Get(':id/tickets/items') + async queueTicketItems( + @Param('id') id: string, + @Param('ticket_id') ticket_id: string, + ): Promise { + return await this.orchestrator.queueTicketDetail(id, ticket_id); + } + @Get(':id/items') async queueItems(@Param('id') id: string): Promise { return await this.orchestrator.queueItems(id);