diff --git a/src/app.module.ts b/src/app.module.ts index 1fa72cf33516b968b419451019bbdaa1725db5a9..9bb9a151c99a1be22af15509661b8fec3ecc04b9 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -10,7 +10,7 @@ import { PendaftaranTesis } from "./entities/pendaftaranTesis.entity"; import { PengujiSidsem } from "./entities/pengujiSidsem.entity"; import { RegistrasiTesisModule } from "./registrasi-tesis/registrasi-tesis.module"; import { ConfigModule } from "@nestjs/config"; -import { AlokasiRuanganModule } from "./alokasi-ruangan/alokasi-ruangan.module"; +import { RegistrasiSidsemModule } from "./registrasi-sidsem/registrasi-sidsem.module"; import { AlokasiTopikModule } from "./alokasi-topik/alokasi-topik.module"; import { AuthModule } from "./auth/auth.module"; import { BimbinganModule } from "./bimbingan/bimbingan.module"; @@ -22,6 +22,7 @@ import { PenggunaModule } from "./pengguna/pengguna.module"; import { KonfigurasiModule } from "./konfigurasi/konfigurasi.module"; import { Konfigurasi } from "./entities/konfigurasi.entity"; import { DashboardModule } from "./dashboard/dashboard.module"; +import { BerkasSidsem } from "./entities/berkasSidsem.entity"; @Module({ imports: [ @@ -44,6 +45,7 @@ import { DashboardModule } from "./dashboard/dashboard.module"; Konfigurasi, PendaftaranTesis, PengujiSidsem, + BerkasSidsem, ], synchronize: true, }), @@ -53,7 +55,7 @@ import { DashboardModule } from "./dashboard/dashboard.module"; DashboardModule, BimbinganModule, DosenBimbinganModule, - AlokasiRuanganModule, + RegistrasiSidsemModule, PenggunaModule, KonfigurasiModule, ], diff --git a/src/entities/berkasSidsem.entity.ts b/src/entities/berkasSidsem.entity.ts new file mode 100644 index 0000000000000000000000000000000000000000..7105028e2c852feb7127e4d7837236f2752ec58d --- /dev/null +++ b/src/entities/berkasSidsem.entity.ts @@ -0,0 +1,30 @@ +import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm"; +import { IsString, IsUrl } from "@nestjs/class-validator"; +import { ApiProperty } from "@nestjs/swagger"; +import { PendaftaranSidsem } from "./pendaftaranSidsem"; + +@Entity() +export class BerkasSidsem { + @ApiProperty({ example: "550e8400-e29b-41d4-a716-446655440000" }) + @PrimaryGeneratedColumn("uuid") + id: string; + + @ManyToOne( + () => PendaftaranSidsem, + (pendaftaranSidsem) => pendaftaranSidsem.id, + { + orphanedRowAction: "delete", + }, + ) + pendaftaranSidsem: PendaftaranSidsem; + + @Column({ type: "text" }) + @IsString() + @ApiProperty() + nama: string; + + @Column({ type: "text" }) + @IsUrl() + @ApiProperty({ example: "https://example.com/berkas.pdf" }) + url: string; +} diff --git a/src/entities/pendaftaranSidsem.ts b/src/entities/pendaftaranSidsem.ts index a733c9cd7aedf8825202a92c3b509e271486847f..8c4a60a1987e6523858dd71ebf66c769a92ccb9e 100644 --- a/src/entities/pendaftaranSidsem.ts +++ b/src/entities/pendaftaranSidsem.ts @@ -9,6 +9,7 @@ import { PendaftaranTesis } from "./pendaftaranTesis.entity"; // import { Ruangan } from "./ruangan.entity"; import { ApiProperty } from "@nestjs/swagger"; import { PengujiSidsem } from "./pengujiSidsem.entity"; +import { BerkasSidsem } from "./berkasSidsem.entity"; export enum TipeSidsemEnum { SEMINAR_1 = "SEMINAR_1", @@ -16,6 +17,12 @@ export enum TipeSidsemEnum { SIDANG = "SIDANG", } +export enum SidsemStatus { + NOT_ASSIGNED = "NOT_ASSIGNED", + REJECTED = "REJECTED", + APPROVED = "APPROVED", +} + @Entity() export class PendaftaranSidsem { @ApiProperty({ example: "550e8400-e29b-41d4-a716-446655440000" }) @@ -27,36 +34,42 @@ export class PendaftaranSidsem { tipe: TipeSidsemEnum; @ApiProperty() - @Column({ type: "boolean", default: false }) - ditolak: boolean; - - @ApiProperty() - @Column({ type: "boolean", nullable: true }) - lulus: boolean; + @Column({ type: "enum", enum: SidsemStatus }) + status: SidsemStatus; @ApiProperty() @Column({ type: "timestamptz", nullable: true }) - waktuMulai: Date; + jadwal: Date; @ApiProperty() - @Column({ type: "timestamptz", nullable: true }) - waktuSelesai: Date; + @Column({ type: "text" }) + judulSidsem: string; @ApiProperty() - @Column({ type: "text", nullable: true }) - linkw2m: string; + @Column({ type: "text" }) + deskripsiSidsem: string; @ManyToOne(() => PendaftaranTesis, (pendaftaranTesis) => pendaftaranTesis.id) pendaftaranTesis: PendaftaranTesis; - // @ApiProperty({ type: Ruangan, nullable: true }) - // @ManyToOne(() => Ruangan, (ruangan) => ruangan.id) - // ruangan: Ruangan; - @ApiProperty() @Column({ type: "text", nullable: true }) ruangan: string; @OneToMany(() => PengujiSidsem, (pengujiSidsem) => pengujiSidsem.sidsem) penguji: PengujiSidsem[]; + + @ApiProperty({ type: [BerkasSidsem] }) + @OneToMany( + () => BerkasSidsem, + (berkasSidsem) => berkasSidsem.pendaftaranSidsem, + { + cascade: true, + }, + ) + berkasSidsem: BerkasSidsem[]; + + @ApiProperty() + @Column({ type: "timestamptz", default: () => "CURRENT_TIMESTAMP" }) + waktuPengiriman: Date; } diff --git a/src/alokasi-ruangan/alokasi-ruangan.controller.ts b/src/registrasi-sidsem/registrasi-sidsem.controller.ts similarity index 77% rename from src/alokasi-ruangan/alokasi-ruangan.controller.ts rename to src/registrasi-sidsem/registrasi-sidsem.controller.ts index 7d8b01d99043b3b6827afdd02095b5903fd0c0d5..86a3fafc50b19ad185eafdf0d25cf3b6a2116e89 100644 --- a/src/alokasi-ruangan/alokasi-ruangan.controller.ts +++ b/src/registrasi-sidsem/registrasi-sidsem.controller.ts @@ -22,8 +22,8 @@ import { GetOnePengajuanSidangRespDto, UpdateAlokasiRuanganReqDto, UpdateAlokasiRuanganRespDto, -} from "./alokasi-ruangan.dto"; -import { AlokasiRuanganService } from "./alokasi-ruangan.service"; +} from "./registrasi-sidsem.dto"; +import { RegistrasiSidsemService } from "./registrasi-sidsem.service"; import { HIGH_AUTHORITY_ROLES } from "src/helper/roles"; @ApiTags("Alokasi Ruangan") @@ -32,14 +32,14 @@ import { HIGH_AUTHORITY_ROLES } from "src/helper/roles"; @UseGuards(CustomAuthGuard, RolesGuard) @Roles(...HIGH_AUTHORITY_ROLES) @Controller("alokasi-ruangan") -export class AlokasiRuanganController { - constructor(private readonly alokasiRuanganService: AlokasiRuanganService) {} +export class RegistrasiSidsemController { + constructor(private readonly regisSidsemService: RegistrasiSidsemService) {} @ApiOkResponse({ type: GetAllPengajuanSidangRespDto }) @Get() async findAll( @Query() query: GetAllPengajuanSidangReqQueryDto, ): Promise<GetAllPengajuanSidangRespDto> { - return this.alokasiRuanganService.findAll(query); + return this.regisSidsemService.findAll(query); } @ApiOkResponse({ type: GetOnePengajuanSidangRespDto }) @@ -47,7 +47,7 @@ export class AlokasiRuanganController { async findOne( @Param("id") id: string, ): Promise<GetOnePengajuanSidangRespDto> { - return this.alokasiRuanganService.findOne(id); + return this.regisSidsemService.findOne(id); } @ApiOkResponse({ type: UpdateAlokasiRuanganRespDto }) @@ -56,6 +56,6 @@ export class AlokasiRuanganController { @Param("id") id: string, @Body() updateAlokasiRuanganDto: UpdateAlokasiRuanganReqDto, ): Promise<UpdateAlokasiRuanganRespDto> { - return this.alokasiRuanganService.update(id, updateAlokasiRuanganDto); + return this.regisSidsemService.update(id, updateAlokasiRuanganDto); } } diff --git a/src/alokasi-ruangan/alokasi-ruangan.dto.ts b/src/registrasi-sidsem/registrasi-sidsem.dto.ts similarity index 100% rename from src/alokasi-ruangan/alokasi-ruangan.dto.ts rename to src/registrasi-sidsem/registrasi-sidsem.dto.ts diff --git a/src/alokasi-ruangan/alokasi-ruangan.module.ts b/src/registrasi-sidsem/registrasi-sidsem.module.ts similarity index 71% rename from src/alokasi-ruangan/alokasi-ruangan.module.ts rename to src/registrasi-sidsem/registrasi-sidsem.module.ts index 874d4733fd314aa13f85ae4c15d44c99ee25ac29..93cf75168059b29e898d20244b5ce15764eb8870 100644 --- a/src/alokasi-ruangan/alokasi-ruangan.module.ts +++ b/src/registrasi-sidsem/registrasi-sidsem.module.ts @@ -7,8 +7,8 @@ import { PendaftaranTesis } from "src/entities/pendaftaranTesis.entity"; import { Pengguna } from "src/entities/pengguna.entity"; import { PengujiSidsem } from "src/entities/pengujiSidsem.entity"; import { CustomStrategy } from "src/middlewares/custom.strategy"; -import { AlokasiRuanganController } from "./alokasi-ruangan.controller"; -import { AlokasiRuanganService } from "./alokasi-ruangan.service"; +import { RegistrasiSidsemController } from "./registrasi-sidsem.controller"; +import { RegistrasiSidsemService } from "./registrasi-sidsem.service"; @Module({ imports: [ @@ -21,7 +21,7 @@ import { AlokasiRuanganService } from "./alokasi-ruangan.service"; ]), AuthModule, ], - controllers: [AlokasiRuanganController], - providers: [AlokasiRuanganService, CustomStrategy], + controllers: [RegistrasiSidsemController], + providers: [RegistrasiSidsemService, CustomStrategy], }) -export class AlokasiRuanganModule {} +export class RegistrasiSidsemModule {} diff --git a/src/alokasi-ruangan/alokasi-ruangan.service.ts b/src/registrasi-sidsem/registrasi-sidsem.service.ts similarity index 92% rename from src/alokasi-ruangan/alokasi-ruangan.service.ts rename to src/registrasi-sidsem/registrasi-sidsem.service.ts index 6b93575d90f1d3466f89f5cb3f879e52d9d99ba1..92a6448015df3bd583267b34a5e3f676dc25de3a 100644 --- a/src/alokasi-ruangan/alokasi-ruangan.service.ts +++ b/src/registrasi-sidsem/registrasi-sidsem.service.ts @@ -3,7 +3,7 @@ import { InjectRepository } from "@nestjs/typeorm"; import { DosenBimbingan } from "src/entities/dosenBimbingan.entity"; import { PendaftaranSidsem } from "src/entities/pendaftaranSidsem"; import { PengujiSidsem } from "src/entities/pengujiSidsem.entity"; -import { IsNull, Like, Repository } from "typeorm"; +import { Like, Repository } from "typeorm"; import { GetAllPengajuanSidangItemDto, GetAllPengajuanSidangReqQueryDto, @@ -11,10 +11,10 @@ import { GetOnePengajuanSidangRespDto, UpdateAlokasiRuanganReqDto, UpdateAlokasiRuanganRespDto, -} from "./alokasi-ruangan.dto"; +} from "./registrasi-sidsem.dto"; @Injectable() -export class AlokasiRuanganService { +export class RegistrasiSidsemService { constructor( @InjectRepository(PendaftaranSidsem) private pendaftaranSidsemRepo: Repository<PendaftaranSidsem>, @@ -30,9 +30,8 @@ export class AlokasiRuanganService { const [queryData, total] = await this.pendaftaranSidsemRepo.findAndCount({ select: { id: true, - waktuMulai: true, tipe: true, - lulus: true, + jadwal: true, ruangan: true, pendaftaranTesis: { id: true, @@ -51,7 +50,6 @@ export class AlokasiRuanganService { skip: (query.page - 1) * query.limit || undefined, where: { tipe: query.jenisSidang, - lulus: IsNull(), pendaftaranTesis: { mahasiswa: [ { nim: Like(`%${query.search ?? ""}%`) }, @@ -65,7 +63,7 @@ export class AlokasiRuanganService { idPengajuanSidsem: res.id, nimMahasiswa: res.pendaftaranTesis.mahasiswa.nim, namaMahasiswa: res.pendaftaranTesis.mahasiswa.nama, - jadwalSidang: res.waktuMulai.toISOString(), + jadwalSidang: res.jadwal.toISOString(), jenisSidang: res.tipe, ruangan: res.ruangan, })); @@ -77,7 +75,7 @@ export class AlokasiRuanganService { const sidsemQueryData = await this.pendaftaranSidsemRepo.findOne({ select: { id: true, - waktuMulai: true, + jadwal: true, tipe: true, ruangan: true, pendaftaranTesis: { @@ -144,7 +142,7 @@ export class AlokasiRuanganService { idPengajuanSidsem: sidsemQueryData.id, nimMahasiswa: sidsemQueryData.pendaftaranTesis.mahasiswa.nim, namaMahasiswa: sidsemQueryData.pendaftaranTesis.mahasiswa.nama, - jadwalSidang: sidsemQueryData.waktuMulai.toISOString(), + jadwalSidang: sidsemQueryData.jadwal.toISOString(), jenisSidang: sidsemQueryData.tipe, ruangan: sidsemQueryData.ruangan, emailMahasiswa: sidsemQueryData.pendaftaranTesis.mahasiswa.email, @@ -165,7 +163,7 @@ export class AlokasiRuanganService { const pendaftaranSidsem = await this.pendaftaranSidsemRepo.findOne({ select: { id: true, - waktuMulai: true, + jadwal: true, tipe: true, pendaftaranTesis: { id: true, @@ -198,7 +196,7 @@ export class AlokasiRuanganService { return { idPengajuanSidsem: pendaftaranSidsem.id, - jadwalSidang: pendaftaranSidsem.waktuMulai.toISOString(), + jadwalSidang: pendaftaranSidsem.jadwal.toISOString(), jenisSidang: pendaftaranSidsem.tipe, namaMahasiswa: pendaftaranSidsem.pendaftaranTesis.mahasiswa.nama, nimMahasiswa: pendaftaranSidsem.pendaftaranTesis.mahasiswa.nim,