diff --git a/Dockerfile.production b/Dockerfile.production index 521ea5c9fd3ae8e8f567a18bf797ddf377972a38..eda636a124f4d4d37fbbef76850773658a8432df 100644 --- a/Dockerfile.production +++ b/Dockerfile.production @@ -18,4 +18,4 @@ COPY --from=builder /go/src/app/tmp/main . EXPOSE 8080 -CMD ["./main"] +CMD ["./main"] \ No newline at end of file diff --git a/src/module/pendaftaran_sidsem/entity/pendaftaran_sidsem.go b/src/module/pendaftaran_sidsem/entity/pendaftaran_sidsem.go index 68843831d59da3562f7d0401fe9cef7cb6f4004b..9479228272e8874af25c0bcdc6f371554f8321ef 100644 --- a/src/module/pendaftaran_sidsem/entity/pendaftaran_sidsem.go +++ b/src/module/pendaftaran_sidsem/entity/pendaftaran_sidsem.go @@ -140,6 +140,11 @@ type EditDitolakRequest struct { Ditolak bool `json:"ditolak"` } +type DetailReq struct { + IdMahasiswa string `json:"id_mahasiswa"` + IdSidSem string `json:"id_sidsem"` +} + type Placeholders struct { Nama string `json:"nama"` Nim string `json:"nim"` @@ -188,3 +193,29 @@ type DetailSidSemByMahasiswa struct { NamaRuangan string `json:"nama_ruangan"` Ditolak bool `json:"ditolak"` } + +type DetailSidSemTA struct { + IDMahasiswa string `json:"id_mahasiswa"` + Nama string `json:"nama"` + Email string `json:"email"` + JalurPilihan string `json:"jalur_pilihan"` + DosbingName string `json:"dosbing_name"` + DosujiName string `json:"dosuji_name"` + Tipe string `json:"tipe"` + JudulProposal string `json:"judul_proposal"` + Deskripsi string `json:"deskripsi"` + Berkas []BerkasSidSem `json:"berkas_sidsem"` + JadwalSidang time.Time `json:"jadwal_sidang"` + Tempat string `json:"tempat"` + Status bool `json:"status"` +} + +type TipeJudulDesc struct { + JudulProposal string `json:"judul_proposal"` + Deskripsi string `json:"deskripsi"` +} + +type JadwalStatus struct { + WaktuMulai string `json:"waktu_mulai"` + Ditolak string `json:"ditolak"` +} diff --git a/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go b/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go index 35c5b98f20ae99f09d0b940a2e1a5372bc4e9d01..663e17c9c9daaec9879aefe352a06ab914b56ff9 100644 --- a/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go +++ b/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go @@ -481,7 +481,7 @@ func (repo *PendaftaranSidSemRepo) GetNameUntilTopikPlaceholders(idMahasiswa str func (repo *PendaftaranSidSemRepo) GetDosbingNamePlaceholder(idMahasiswa string) (entity.DosbingName, error) { var dosbingName entity.DosbingName - query := ` SELECT p.nama FROM pengguna p JOIN dosen_bimbingan db ON p.id = db.dosen_id JOIN pendaftaran_ta pt ON db.pendaftaran_id = pt.id WHERE pt.id_mahasiswa = ? AND pt.status = true;` + query := ` SELECT p.nama FROM pengguna p JOIN dosen_bimbingan db ON p.id = db.dosen_id JOIN pendaftaran_ta pt ON db.pendaftaran_id = pt.id WHERE pt.id_mahasiswa = ? AND pt.status = 'APPROVED';` if err := repo.DBRead.Raw(query, idMahasiswa).Scan(&dosbingName).Error; err != nil { return entity.DosbingName{}, err @@ -549,3 +549,50 @@ func (repo *PendaftaranSidSemRepo) GetRemainingDetailSidSem(idPendaftaranSidSem return remDet, nil } + +func (repo *PendaftaranSidSemRepo) GetDosujiNamePlaceholder(idSidsem string) (entity.DosbingName, error) { + var dosbingName entity.DosbingName + + query := ` SELECT p.nama FROM pengguna p JOIN penguji_sidsem ps ON p.id = ps.dosen_id JOIN pendaftaran_sidsem pd ON pd.id = ps.sidsem_id WHERE pd.id = ?` + + if err := repo.DBRead.Raw(query, idSidsem).Scan(&dosbingName).Error; err != nil { + return entity.DosbingName{}, err + } + + return dosbingName, nil +} + +func (repo *PendaftaranSidSemRepo) GetSidSemJudDes(idSidsem string) (entity.TipeJudulDesc, error) { + var tipeJudulDesc entity.TipeJudulDesc + + if err := repo.DBRead.Table("pendaftaran_sidsem").Find(&tipeJudulDesc).Where("id = ?", idSidsem); err.Error != nil { + return entity.TipeJudulDesc{}, err.Error + } + + return tipeJudulDesc, nil +} + +func (repo *PendaftaranSidSemRepo) GetSidSemBerkas(idSidsem string) ([]entity.BerkasSidSem, error) { + var berkasSidsem []entity.BerkasSidSem + + if err := repo.DBRead.Table("berkas_sidsem").Where("id_pendaftaran_sid_sem = ?", idSidsem).Find(&berkasSidsem); err.Error != nil { + return []entity.BerkasSidSem{}, err.Error + } + + return berkasSidsem, nil +} + +func (repo *PendaftaranSidSemRepo) GetRuanganName(idSidsem string) (string, error) { + var namaRuangan string + + err := repo.DBRead.Table("ruangan"). + Select("nama"). + Joins("JOIN pendaftaran_sidsem on ruangan.id = pendaftaran_sidsem.ruangan_id"). + Where("pendaftaran_sidsem.id = ?", idSidsem). + Scan(&namaRuangan).Error + if err != nil { + return "", err + } + + return namaRuangan, nil +} diff --git a/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go b/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go index dd3d6144cb47cd759cd8289318b98a1a3a9898d3..7d98126d12e4f544cddea50297e39537936ce5b3 100644 --- a/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go +++ b/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go @@ -24,6 +24,7 @@ type PendaftaranSidSemUsecase interface { GetPendaftaran(offset, size int) (output []entity.RekapPendaftaranRequest, err error) IsRegisteredSidsem(idMahasiswa string, tipe string) (bool, error) GetSidSemDetailByMahasiswaId(idMahasiswa string, tipe string) (entity.DetailSidSemByMahasiswa, error) + GetSidSemDetailTA(idMahasiswa string, IdSidSem string) (entity.DetailSidSemTA, error) } type PendaftaranSidSemUc struct { @@ -190,3 +191,64 @@ func (uc *PendaftaranSidSemUc) GetSidSemDetailByMahasiswaId(idMahasiswa string, return detailSidSemByMahasiswa, nil } + +func (uc *PendaftaranSidSemUc) GetSidSemDetailTA(idMahasiswa string, idSidsem string) (entity.DetailSidSemTA, error) { + var namaRuangan string + infoTopik, err := uc.pendaftaransidsemrepo.GetInfoTopikMahasiswa(idMahasiswa) + if err != nil { + return entity.DetailSidSemTA{}, err + } + + dosbingName, err := uc.pendaftaransidsemrepo.GetDosbingNamePlaceholder(idMahasiswa) + if err != nil { + return entity.DetailSidSemTA{}, err + } + + dosujiName, err := uc.pendaftaransidsemrepo.GetDosujiNamePlaceholder(idSidsem) + if err != nil { + return entity.DetailSidSemTA{}, err + } + + judDes, err := uc.pendaftaransidsemrepo.GetSidSemJudDes(idSidsem) + if err != nil { + return entity.DetailSidSemTA{}, err + } + + berkasSidsem, err := uc.pendaftaransidsemrepo.GetSidSemBerkas(idSidsem) + if err != nil { + return entity.DetailSidSemTA{}, err + } + + remDet, err := uc.pendaftaransidsemrepo.GetRemainingDetailSidSem(idSidsem) + if err != nil { + return entity.DetailSidSemTA{}, err + } + + if remDet.RuanganID == "" { + namaRuangan = "Belum Ada" + } else { + namaRuangan, err = uc.pendaftaransidsemrepo.GetRuanganName(idSidsem) + if err != nil { + return entity.DetailSidSemTA{}, err + } + } + + detailSidsemTA := entity.DetailSidSemTA{ + IDMahasiswa: infoTopik.IDMahasiswa, + Nama: infoTopik.Nama, + Email: infoTopik.Email, + JalurPilihan: infoTopik.JalurPilihan, + DosbingName: dosbingName.Nama, + DosujiName: dosujiName.Nama, + Tipe: remDet.Tipe, + JudulProposal: judDes.JudulProposal, + Deskripsi: judDes.Deskripsi, + Berkas: berkasSidsem, + JadwalSidang: remDet.WaktuMulai, + Tempat: namaRuangan, + Status: remDet.Ditolak, + } + + return detailSidsemTA, nil + +} diff --git a/src/module/pendaftaran_sidsem/internal/usecase/repository.go b/src/module/pendaftaran_sidsem/internal/usecase/repository.go index 788731c385fa87f79f681e17eddfc8dd27311cb7..e0ae5ad4af8324b444ada14336b059dbb65cc8a2 100644 --- a/src/module/pendaftaran_sidsem/internal/usecase/repository.go +++ b/src/module/pendaftaran_sidsem/internal/usecase/repository.go @@ -24,4 +24,8 @@ type PendaftaranSidSemRepository interface { IsRegisteredSidsem(idMahasiswa string, tipe string) (string, error) GetInfoTopikMahasiswa(idMahasiswa string) (entity.InfoTopikMahasiswa, error) GetRemainingDetailSidSem(idMahasiswa string) (entity.RemainingDetailSidSem, error) + GetDosujiNamePlaceholder(idSidsem string) (entity.DosbingName, error) + GetSidSemJudDes(idSidsem string) (entity.TipeJudulDesc, error) + GetSidSemBerkas(idSidsem string) ([]entity.BerkasSidSem, error) + GetRuanganName(idSidsem string) (string, error) } diff --git a/src/module/pendaftaran_sidsem/transport/timta_handler.go b/src/module/pendaftaran_sidsem/transport/timta_handler.go index 3d374c68f307a23b21366820b15050c643b2fa9a..0f184ab7ee8c8b22206ee8648914291b9307d677 100644 --- a/src/module/pendaftaran_sidsem/transport/timta_handler.go +++ b/src/module/pendaftaran_sidsem/transport/timta_handler.go @@ -28,6 +28,7 @@ func NewTIMTAPendaftaranSidSemHandler(cfg config.PendaftaranSidSemTransportConfi func (t *TIMTAPendaftaranSidSemHandler) MountTIMTA(group *echo.Group) { group.GET("/pendaftaran-sidsem", t.GetPendaftaran) + group.GET("/detail-sidsem", t.GetSidSemDetail) group.PATCH("/pendaftaran-ditolak", t.EditDitolak) } @@ -52,7 +53,6 @@ func (t *TIMTAPendaftaranSidSemHandler) GetPendaftaran(c echo.Context) error { return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusOK, "Pendaftaran successfully retreived", jadwal)) } - func (t *TIMTAPendaftaranSidSemHandler) EditDitolak(c echo.Context) error { request := new(entity.EditDitolakRequest) if err := c.Bind(&request); err != nil { @@ -65,3 +65,16 @@ func (t *TIMTAPendaftaranSidSemHandler) EditDitolak(c echo.Context) error { return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusOK, "Pendaftaran successfully edited", jadwal)) } + +func (t *TIMTAPendaftaranSidSemHandler) GetSidSemDetail(c echo.Context) error { + request := new(entity.DetailReq) + if err := c.Bind(&request); err != nil { + return c.JSON(http.StatusBadRequest, utils.ResponseDetailOutput(false, http.StatusBadRequest, err.Error(), nil)) + } + jadwal, err := t.pendaftaransidsemUsecase.GetSidSemDetailTA(request.IdMahasiswa, request.IdSidSem) + if err != nil { + return c.JSON(http.StatusBadRequest, utils.ResponseDetailOutput(false, http.StatusBadRequest, err.Error(), nil)) + } + + return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusOK, "Pendaftaran successfully edited", jadwal)) +}