diff --git a/src/app.module.ts b/src/app.module.ts index e512e0165861e2f690506dd2331cbe4a5cdcef84..d396e6cba41129c6dc3f00e34fd07ef58a5f0418 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -35,6 +35,7 @@ import { SubmisiTugas } from "./entities/submisiTugas"; import { KelasModule } from "./kelas/kelas.module"; import { BerkasSubmisiTugas } from "./entities/berkasSubmisiTugas"; import { BerkasTugas } from "./entities/berkasTugas"; +import { DosenBimbinganModule } from './dosen-bimbingan/dosen-bimbingan.module'; @Module({ imports: [ @@ -82,6 +83,7 @@ import { BerkasTugas } from "./entities/berkasTugas"; BimbinganModule, KonfigurasiModule, KelasModule, + DosenBimbinganModule, ], controllers: [AppController], providers: [AppService], diff --git a/src/dosen-bimbingan/dosen-bimbingan.controller.ts b/src/dosen-bimbingan/dosen-bimbingan.controller.ts new file mode 100644 index 0000000000000000000000000000000000000000..81a31679c5443f03c6469b478be79566aa2e80b0 --- /dev/null +++ b/src/dosen-bimbingan/dosen-bimbingan.controller.ts @@ -0,0 +1,34 @@ +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 { GetDosbimResDto } from "./dosen-bimbingan.dto"; +import { DosenBimbinganService } from "./dosen-bimbingan.service"; + +@ApiTags("Dosen Bimbingan") +@ApiCookieAuth() +@ApiBearerAuth() +@Controller("dosen-bimbingan") +@UseGuards(CustomAuthGuard, RolesGuard) +@Roles(RoleEnum.ADMIN, RoleEnum.S2_TIM_TESIS, RoleEnum.S2_MAHASISWA) +export class DosenBimbinganController { + constructor(private readonly dosbimService: DosenBimbinganService) {} + + @ApiOkResponse({ type: [GetDosbimResDto] }) + @ApiOperation({ + summary: + "Get all available dosen bimbingan. Roles: ADMIN, S2_TIM_TESIS, S2_MAHASISWA", + }) + @Get() + async get() { + return await this.dosbimService.getAll(); + } +} diff --git a/src/dosen-bimbingan/dosen-bimbingan.dto.ts b/src/dosen-bimbingan/dosen-bimbingan.dto.ts new file mode 100644 index 0000000000000000000000000000000000000000..23c823e7389a759b7d532c02543e736d5bbaf0d4 --- /dev/null +++ b/src/dosen-bimbingan/dosen-bimbingan.dto.ts @@ -0,0 +1,17 @@ +import { IsOptional } from "@nestjs/class-validator"; +import { ApiPropertyOptional, PickType } from "@nestjs/swagger"; +import { IsUUID } from "class-validator"; +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", + "nama", +] as const) {} diff --git a/src/dosen-bimbingan/dosen-bimbingan.module.ts b/src/dosen-bimbingan/dosen-bimbingan.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..1929f62932c353150ab780e6a6fb785c560a9357 --- /dev/null +++ b/src/dosen-bimbingan/dosen-bimbingan.module.ts @@ -0,0 +1,21 @@ +import { Module } from "@nestjs/common"; +import { DosenBimbinganController } from "./dosen-bimbingan.controller"; +import { DosenBimbinganService } from "./dosen-bimbingan.service"; +import { AuthModule } from "src/auth/auth.module"; +import { TypeOrmModule } from "@nestjs/typeorm"; +import { PendaftaranTesis } from "src/entities/pendaftaranTesis.entity"; +import { DosenBimbingan } from "src/entities/dosenBimbingan.entity"; +import { Pengguna } from "src/entities/pengguna.entity"; +import { KonfigurasiModule } from "src/konfigurasi/konfigurasi.module"; +import { CustomStrategy } from "src/middlewares/custom.strategy"; + +@Module({ + imports: [ + TypeOrmModule.forFeature([PendaftaranTesis, DosenBimbingan, Pengguna]), + AuthModule, + KonfigurasiModule, + ], + controllers: [DosenBimbinganController], + providers: [DosenBimbinganService, CustomStrategy], +}) +export class DosenBimbinganModule {} diff --git a/src/dosen-bimbingan/dosen-bimbingan.service.ts b/src/dosen-bimbingan/dosen-bimbingan.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..88f0f9d159f8f0e4949c06a4c5bbcb7ad9a9643a --- /dev/null +++ b/src/dosen-bimbingan/dosen-bimbingan.service.ts @@ -0,0 +1,25 @@ +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 DosenBimbinganService { + constructor( + @InjectRepository(Pengguna) + private penggunaRepo: Repository<Pengguna>, + ) {} + + async getAll() { + return await this.penggunaRepo.find({ + select: { + id: true, + nama: true, + email: true, + }, + where: { + roles: ArrayContains([RoleEnum.S2_PEMBIMBING]), + }, + }); + } +}