From fb7f925c78b6bb83ef7fcf9f16dd15b8b2afa732 Mon Sep 17 00:00:00 2001 From: shancheas Date: Thu, 14 Nov 2024 14:24:56 +0700 Subject: [PATCH] feat: add session to admin queue --- .../entities/user-sessions.interface.ts | 1 + .../domain/usecases/index-queue.manager.ts | 4 ++ .../controllers/queue-admin.controller.ts | 37 +++++++++++++++++-- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/core/sessions/domain/entities/user-sessions.interface.ts b/src/core/sessions/domain/entities/user-sessions.interface.ts index 848d44e..c59f85b 100644 --- a/src/core/sessions/domain/entities/user-sessions.interface.ts +++ b/src/core/sessions/domain/entities/user-sessions.interface.ts @@ -6,5 +6,6 @@ export interface UsersSession { name: string; role: UserRole; source?: AppSource; + item_id?: string; user_privilege_id: string; } diff --git a/src/modules/queue/domain/usecases/index-queue.manager.ts b/src/modules/queue/domain/usecases/index-queue.manager.ts index a379d99..4740c44 100644 --- a/src/modules/queue/domain/usecases/index-queue.manager.ts +++ b/src/modules/queue/domain/usecases/index-queue.manager.ts @@ -68,6 +68,10 @@ export class IndexQueueManager extends BaseIndexManager { end, }); + queryBuilder.andWhere(`${this.tableName}.item_queue_id = :item_queue_id`, { + item_queue_id: this.filterParam.item_queue_id, + }); + if (this.filterParam.vip != null) { queryBuilder.andWhere(`${this.tableName}.vip = :vip`, { vip: this.filterParam.vip, diff --git a/src/modules/queue/infrastructure/controllers/queue-admin.controller.ts b/src/modules/queue/infrastructure/controllers/queue-admin.controller.ts index eb5363e..3916154 100644 --- a/src/modules/queue/infrastructure/controllers/queue-admin.controller.ts +++ b/src/modules/queue/infrastructure/controllers/queue-admin.controller.ts @@ -1,4 +1,11 @@ -import { Controller, Get, Param, Post, Query } from '@nestjs/common'; +import { + Controller, + Get, + Param, + Post, + Query, + UnauthorizedException, +} from '@nestjs/common'; import { MODULE_NAME } from 'src/core/strings/constants/module.constants'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; @@ -9,18 +16,40 @@ import { Queue } from '../../domain/entities/queue.entity'; import { QueueDto } from './dto/queue.filter'; import { Pagination } from 'src/core/response'; import { Public } from 'src/core/guards'; +import { UserProvider } from 'src/core/sessions'; @ApiTags(`Queue Admin`) @Controller(`v1/${MODULE_NAME.QUEUE}-admin`) @ApiBearerAuth('JWT') -@Public(true) +@Public(false) export class QueueAdminController { - constructor(private orchestrator: QueueAdminOrchestrator) {} + constructor( + private orchestrator: QueueAdminOrchestrator, + private readonly userProvider: UserProvider, + ) {} @Get('queues') @Pagination() async index(@Query() params: QueueDto): Promise> { - return await this.orchestrator.index(params); + const queue_id = this.userProvider.user.item_id; + if (!queue_id) { + throw new UnauthorizedException({ + error: 'USER_IS_NOT_ADMIN', + message: "Login user isn't admin, please login in admin account", + code: 20001, + }); + } + return await this.orchestrator.index({ ...params, queue_id }); + } + + @Get('queues/:id') + @Public(true) + @Pagination() + async indexPublic( + @Param('id') id: string, + @Query() params: QueueDto, + ): Promise> { + return await this.orchestrator.index({ ...params, queue_id: id }); } @Post('queues/:id/call')