diff --git a/src/app.module.ts b/src/app.module.ts index 9bb9a151c99a1be22af15509661b8fec3ecc04b9..25728d3124a279326173b50c046e2cb22dc0ac8a 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 16e493a95a99c7f62c02cf894b7386b3e5974383..47a532f830f4d2f30afeff37c5e57b5a6a3e4b82 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 0000000000000000000000000000000000000000..d50cb97c330b731985268617b2e50fe6087c7066 --- /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 0000000000000000000000000000000000000000..99edd73b7e11ddf929d78756346cdf4efd0913fb --- /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 0000000000000000000000000000000000000000..1c64d3a567c20ecd9f1e949e6f99d7e998db7d13 --- /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 0000000000000000000000000000000000000000..712b5ced205297b509b4d23820557969a7f51888 --- /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 8f39d1c33675cd4f871fe6271f9bfbd301979f3a..05e2e26f2ea78343514d74aec6917e2a357dad8f 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();