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