From eb628dc4da911530104e4f4f2c7914b9c0a05664 Mon Sep 17 00:00:00 2001
From: Chiquita Ahsanunnisa <16521248@mahasiswa.itb.ac.id>
Date: Sat, 4 May 2024 12:47:35 +0700
Subject: [PATCH] feat: get dosen penguji list

---
 src/app.module.ts                             |  2 ++
 src/dosen-bimbingan/dosen-bimbingan.dto.ts    | 11 +------
 src/dosen-penguji/dosen-penguji.controller.ts | 33 +++++++++++++++++++
 src/dosen-penguji/dosen-penguji.dto.ts        |  9 +++++
 src/dosen-penguji/dosen-penguji.module.ts     | 14 ++++++++
 src/dosen-penguji/dosen-penguji.service.ts    | 26 +++++++++++++++
 src/main.ts                                   |  2 ++
 7 files changed, 87 insertions(+), 10 deletions(-)
 create mode 100644 src/dosen-penguji/dosen-penguji.controller.ts
 create mode 100644 src/dosen-penguji/dosen-penguji.dto.ts
 create mode 100644 src/dosen-penguji/dosen-penguji.module.ts
 create mode 100644 src/dosen-penguji/dosen-penguji.service.ts

diff --git a/src/app.module.ts b/src/app.module.ts
index 9bb9a15..25728d3 100644
--- a/src/app.module.ts
+++ b/src/app.module.ts
@@ -23,6 +23,7 @@ import { KonfigurasiModule } from "./konfigurasi/konfigurasi.module";
 import { Konfigurasi } from "./entities/konfigurasi.entity";
 import { DashboardModule } from "./dashboard/dashboard.module";
 import { BerkasSidsem } from "./entities/berkasSidsem.entity";
+import { DosenPengujiModule } from "./dosen-penguji/dosen-penguji.module";
 
 @Module({
   imports: [
@@ -58,6 +59,7 @@ import { BerkasSidsem } from "./entities/berkasSidsem.entity";
     RegistrasiSidsemModule,
     PenggunaModule,
     KonfigurasiModule,
+    DosenPengujiModule,
   ],
   controllers: [AppController],
   providers: [AppService],
diff --git a/src/dosen-bimbingan/dosen-bimbingan.dto.ts b/src/dosen-bimbingan/dosen-bimbingan.dto.ts
index 16e493a..47a532f 100644
--- a/src/dosen-bimbingan/dosen-bimbingan.dto.ts
+++ b/src/dosen-bimbingan/dosen-bimbingan.dto.ts
@@ -1,15 +1,6 @@
-import { IsOptional } from "@nestjs/class-validator";
-import { ApiPropertyOptional, PickType } from "@nestjs/swagger";
-import { IsUUID } from "class-validator";
+import { PickType } from "@nestjs/swagger";
 import { Pengguna } from "src/entities/pengguna.entity";
 
-export class DosbimOptQueryDto {
-  @ApiPropertyOptional({ example: "550e8400-e29b-41d4-a716-446655440000" })
-  @IsOptional()
-  @IsUUID()
-  regId?: string;
-}
-
 export class GetDosbimResDto extends PickType(Pengguna, [
   "id",
   "email",
diff --git a/src/dosen-penguji/dosen-penguji.controller.ts b/src/dosen-penguji/dosen-penguji.controller.ts
new file mode 100644
index 0000000..d50cb97
--- /dev/null
+++ b/src/dosen-penguji/dosen-penguji.controller.ts
@@ -0,0 +1,33 @@
+import { Controller, Get, UseGuards } from "@nestjs/common";
+import {
+  ApiBearerAuth,
+  ApiCookieAuth,
+  ApiOkResponse,
+  ApiOperation,
+  ApiTags,
+} from "@nestjs/swagger";
+import { RoleEnum } from "src/entities/pengguna.entity";
+import { CustomAuthGuard } from "src/middlewares/custom-auth.guard";
+import { Roles } from "src/middlewares/roles.decorator";
+import { RolesGuard } from "src/middlewares/roles.guard";
+import { GetDosujiResDto } from "./dosen-penguji.dto";
+import { DosenPengujiService } from "./dosen-penguji.service";
+
+@ApiTags("Dosen Penguji")
+@ApiCookieAuth()
+@ApiBearerAuth()
+@Controller("dosen-penguji")
+@UseGuards(CustomAuthGuard, RolesGuard)
+@Roles(RoleEnum.ADMIN, RoleEnum.S2_TIM_TESIS)
+export class DosenPengujiController {
+  constructor(private readonly dosujiService: DosenPengujiService) {}
+
+  @ApiOkResponse({ type: [GetDosujiResDto] })
+  @ApiOperation({
+    summary: "Get all available dosen penguji. Roles: ADMIN, S2_TIM_TESIS",
+  })
+  @Get()
+  async get() {
+    return await this.dosujiService.getAll();
+  }
+}
diff --git a/src/dosen-penguji/dosen-penguji.dto.ts b/src/dosen-penguji/dosen-penguji.dto.ts
new file mode 100644
index 0000000..99edd73
--- /dev/null
+++ b/src/dosen-penguji/dosen-penguji.dto.ts
@@ -0,0 +1,9 @@
+import { PickType } from "@nestjs/swagger";
+import { Pengguna } from "src/entities/pengguna.entity";
+
+export class GetDosujiResDto extends PickType(Pengguna, [
+  "id",
+  "email",
+  "nama",
+  "keahlian",
+] as const) {}
diff --git a/src/dosen-penguji/dosen-penguji.module.ts b/src/dosen-penguji/dosen-penguji.module.ts
new file mode 100644
index 0000000..1c64d3a
--- /dev/null
+++ b/src/dosen-penguji/dosen-penguji.module.ts
@@ -0,0 +1,14 @@
+import { Module } from "@nestjs/common";
+import { AuthModule } from "src/auth/auth.module";
+import { TypeOrmModule } from "@nestjs/typeorm";
+import { Pengguna } from "src/entities/pengguna.entity";
+import { CustomStrategy } from "src/middlewares/custom.strategy";
+import { DosenPengujiController } from "./dosen-penguji.controller";
+import { DosenPengujiService } from "./dosen-penguji.service";
+
+@Module({
+  imports: [TypeOrmModule.forFeature([Pengguna]), AuthModule],
+  controllers: [DosenPengujiController],
+  providers: [DosenPengujiService, CustomStrategy],
+})
+export class DosenPengujiModule {}
diff --git a/src/dosen-penguji/dosen-penguji.service.ts b/src/dosen-penguji/dosen-penguji.service.ts
new file mode 100644
index 0000000..712b5ce
--- /dev/null
+++ b/src/dosen-penguji/dosen-penguji.service.ts
@@ -0,0 +1,26 @@
+import { Injectable } from "@nestjs/common";
+import { InjectRepository } from "@nestjs/typeorm";
+import { Pengguna, RoleEnum } from "src/entities/pengguna.entity";
+import { ArrayContains, Repository } from "typeorm";
+
+@Injectable()
+export class DosenPengujiService {
+  constructor(
+    @InjectRepository(Pengguna)
+    private penggunaRepo: Repository<Pengguna>,
+  ) {}
+
+  async getAll() {
+    return await this.penggunaRepo.find({
+      select: {
+        id: true,
+        nama: true,
+        email: true,
+        keahlian: true,
+      },
+      where: {
+        roles: ArrayContains([RoleEnum.S2_PENGUJI]),
+      },
+    });
+  }
+}
diff --git a/src/main.ts b/src/main.ts
index 8f39d1c..05e2e26 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -25,8 +25,10 @@ async function bootstrap() {
     .addTag("Bimbingan")
     .addTag("Dashboard")
     .addTag("Dosen Bimbingan")
+    .addTag("Dosen Penguji")
     .addTag("Konfigurasi")
     .addTag("Registrasi Tesis")
+    .addTag("Registrasi Sidang Seminar")
     .addCookieAuth(process.env.COOKIE_NAME)
     .addBearerAuth()
     .build();
-- 
GitLab