diff --git a/src/module/pendaftaran_sidsem/entity/pendaftaran_sidsem.go b/src/module/pendaftaran_sidsem/entity/pendaftaran_sidsem.go index c462c42fce01bc1ae5fe88754a6899c82bc696f4..68843831d59da3562f7d0401fe9cef7cb6f4004b 100644 --- a/src/module/pendaftaran_sidsem/entity/pendaftaran_sidsem.go +++ b/src/module/pendaftaran_sidsem/entity/pendaftaran_sidsem.go @@ -55,15 +55,14 @@ type PendaftaranSidSemRequest struct { Link string } - type RekapPendaftaranRequest struct { - ID string `json:"id"` - Nim string `json:"nim"` - IdMahasiswa string `json:"id_mahasiswa"` - Nama string `json:"nama_mahasiswa"` - Dosbing string `json:"nama_dosbing"` - Tipe string `json:"tipe"` - Ditolak bool `json:"status"` + ID string `json:"id"` + Nim string `json:"nim"` + IdMahasiswa string `json:"id_mahasiswa"` + Nama string `json:"nama_mahasiswa"` + Dosbing string `json:"nama_dosbing"` + Tipe string `json:"tipe"` + Ditolak bool `json:"status"` } type SeminarPendaftaranSidSemRequest struct { ID string @@ -137,8 +136,8 @@ type EditLulusRequest struct { } type EditDitolakRequest struct { - Id string `json:"id"` - Ditolak bool `json:"ditolak"` + Id string `json:"id"` + Ditolak bool `json:"ditolak"` } type Placeholders struct { @@ -159,3 +158,33 @@ type NameTopik struct { type DosbingName struct { Nama string } + +type InfoTopikMahasiswa struct { + IDMahasiswa string `json:"id_mahasiswa"` + Nama string `json:"nama"` + Email string `json:"email"` + JalurPilihan string `json:"jalur_pilihan"` + Judul string `json:"judul"` + Deskripsi string `json:"deskripsi"` +} + +type RemainingDetailSidSem struct { + Tipe string `json:"tipe"` + WaktuMulai time.Time `json:"waktu_mulai"` + RuanganID string `json:"ruangan_id"` + Ditolak bool `json:"ditolak"` +} + +type DetailSidSemByMahasiswa struct { + IDMahasiswa string `json:"id_mahasiswa"` + Nama string `json:"nama"` + Email string `json:"email"` + JalurPilihan string `json:"jalur_pilihan"` + Judul string `json:"judul"` + Deskripsi string `json:"deskripsi"` + DosbingName string `json:"dosbing_name"` + Tipe string `json:"tipe"` + WaktuMulai time.Time `json:"waktu_mulai"` + NamaRuangan string `json:"nama_ruangan"` + Ditolak bool `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 0ae457eb6a8ea6991a6160a8160aae0e4fafe828..35c5b98f20ae99f09d0b940a2e1a5372bc4e9d01 100644 --- a/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go +++ b/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go @@ -501,3 +501,51 @@ func (repo *PendaftaranSidSemRepo) GetPendaftaranTaIdByMahasiswa(idMahasiswa str return pendaftaranTaID, nil } + +func (repo *PendaftaranSidSemRepo) IsRegisteredSidsem(idMahasiswa string, tipe string) (string, error) { + var pendaftaranSidSemId string + + query := `SELECT ps.id FROM pendaftaran_sidsem ps JOIN pendaftaran_ta pt ON ps.pendaftaran_ta_id = pt.id JOIN pengguna p ON pt.id_mahasiswa = p.id WHERE p.id = ? AND ps.tipe = ?` + + if err := repo.DBRead.Raw(query, idMahasiswa, tipe).Scan(&pendaftaranSidSemId).Error; err != nil { + return "", err + } + + return pendaftaranSidSemId, nil +} + +func (repo *PendaftaranSidSemRepo) GetInfoTopikMahasiswa(idMahasiswa string) (entity.InfoTopikMahasiswa, error) { + var infoTopik entity.InfoTopikMahasiswa + + query := `SELECT pt.id_mahasiswa, pg.nama, pg.email, pt.jalur_pilihan , pt.waktu_pengiriman, + t.judul, t.deskripsi + FROM pendaftaran_ta pt + JOIN pengguna pg ON pt.id_mahasiswa = pg.id + JOIN topik t ON pt.id_topik = t.id + WHERE pt.id_mahasiswa = ?` + + if err := repo.DBRead.Raw(query, idMahasiswa).Scan(&infoTopik).Error; err != nil { + return entity.InfoTopikMahasiswa{}, err + } + + return infoTopik, nil +} + +func (repo *PendaftaranSidSemRepo) GetRemainingDetailSidSem(idPendaftaranSidSem string) (entity.RemainingDetailSidSem, error) { + var remDet entity.RemainingDetailSidSem + + result := repo.DBRead.Table("pendaftaran_sidsem ps"). + Select("ps.tipe, ps.waktu_mulai, ps.ruangan_id, ps.ditolak"). + Where("ps.id = ?", idPendaftaranSidSem). + First(&remDet) + + if result.Error == gorm.ErrRecordNotFound { + return entity.RemainingDetailSidSem{}, nil + } + + if result.Error != nil { + return entity.RemainingDetailSidSem{}, result.Error + } + + return remDet, nil +} diff --git a/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go b/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go index 7920e8ad1fa6829fa6c313e1b853c4a61f353b40..dd3d6144cb47cd759cd8289318b98a1a3a9898d3 100644 --- a/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go +++ b/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go @@ -1,6 +1,8 @@ package usecase import ( + "time" + "github.com/google/uuid" "gitlab.informatika.org/k-01-11/graduit-be/src/models" "gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran_sidsem/entity" @@ -20,6 +22,8 @@ type PendaftaranSidSemUsecase interface { EditDitolak(input entity.EditDitolakRequest) (entity.PendaftaranSidSem, error) GetPlaceholders(idMahasiswa string) (entity.Placeholders, error) GetPendaftaran(offset, size int) (output []entity.RekapPendaftaranRequest, err error) + IsRegisteredSidsem(idMahasiswa string, tipe string) (bool, error) + GetSidSemDetailByMahasiswaId(idMahasiswa string, tipe string) (entity.DetailSidSemByMahasiswa, error) } type PendaftaranSidSemUc struct { @@ -33,6 +37,7 @@ func NewPendaftaranSidSemUseCase(pendaftaransidsemrepo PendaftaranSidSemReposito } func (uc *PendaftaranSidSemUc) AddPendaftaran(pendaftaranSidSemBerkas entity.PendaftaranSidSemBerkasReq) (output entity.PendaftaranSidSemBerkas, err error) { + var nullTime time.Time pendaftaranTAID, err := uc.pendaftaransidsemrepo.GetPendaftaranTaIdByMahasiswa(pendaftaranSidSemBerkas.IDMahasiswa) if err != nil { return entity.PendaftaranSidSemBerkas{}, err @@ -47,6 +52,8 @@ func (uc *PendaftaranSidSemUc) AddPendaftaran(pendaftaranSidSemBerkas entity.Pen JudulProposal: pendaftaranSidSemBerkas.JudulProposal, Deskripsi: pendaftaranSidSemBerkas.Deskripsi, RuanganID: nil, + WaktuMulai: nullTime, + WaktuSelesai: nullTime, } newPendaftaran, err := uc.pendaftaransidsemrepo.NewPendaftaranSidSem(pendaftaranSidSem, berkas) @@ -102,6 +109,19 @@ func (uc *PendaftaranSidSemUc) EditDitolak(input entity.EditDitolakRequest) (ent return uc.pendaftaransidsemrepo.EditDitolak(input) } +func (uc *PendaftaranSidSemUc) IsRegisteredSidsem(idMahasiswa string, tipe string) (bool, error) { + result, err := uc.pendaftaransidsemrepo.IsRegisteredSidsem(idMahasiswa, tipe) + if err != nil { + return false, err + } + + if result != "" { + return true, err + } + + return false, err +} + func (uc *PendaftaranSidSemUc) GetPlaceholders(idMahasiswa string) (entity.Placeholders, error) { nameTopik, err := uc.pendaftaransidsemrepo.GetNameUntilTopikPlaceholders(idMahasiswa) if err != nil { @@ -123,3 +143,50 @@ func (uc *PendaftaranSidSemUc) GetPlaceholders(idMahasiswa string) (entity.Place return placeholders, nil } + +func (uc *PendaftaranSidSemUc) GetSidSemDetailByMahasiswaId(idMahasiswa string, tipe string) (entity.DetailSidSemByMahasiswa, error) { + var namaRuangan string + + infoTopik, err := uc.pendaftaransidsemrepo.GetInfoTopikMahasiswa(idMahasiswa) + if err != nil { + return entity.DetailSidSemByMahasiswa{}, err + } + + pendaftaranSidSemId, err := uc.pendaftaransidsemrepo.IsRegisteredSidsem(idMahasiswa, tipe) + if err != nil { + return entity.DetailSidSemByMahasiswa{}, err + } + + dosbingName, err := uc.pendaftaransidsemrepo.GetDosbingNamePlaceholder(idMahasiswa) + if err != nil { + return entity.DetailSidSemByMahasiswa{}, err + } + + remDet, err := uc.pendaftaransidsemrepo.GetRemainingDetailSidSem(pendaftaranSidSemId) + if err != nil { + return entity.DetailSidSemByMahasiswa{}, err + } + + if remDet.RuanganID != "" { + // Get ruangan name + } else { + namaRuangan = "Belum Ada" + } + + detailSidSemByMahasiswa := entity.DetailSidSemByMahasiswa{ + IDMahasiswa: infoTopik.IDMahasiswa, + Nama: infoTopik.Nama, + Email: infoTopik.Email, + JalurPilihan: infoTopik.JalurPilihan, + Judul: infoTopik.Judul, + Deskripsi: infoTopik.Deskripsi, + DosbingName: dosbingName.Nama, + Tipe: remDet.Tipe, + WaktuMulai: remDet.WaktuMulai, + NamaRuangan: namaRuangan, + Ditolak: remDet.Ditolak, + } + + return detailSidSemByMahasiswa, nil + +} diff --git a/src/module/pendaftaran_sidsem/internal/usecase/repository.go b/src/module/pendaftaran_sidsem/internal/usecase/repository.go index e5092ec3007d93d90b5cbf0537a580421649fac0..788731c385fa87f79f681e17eddfc8dd27311cb7 100644 --- a/src/module/pendaftaran_sidsem/internal/usecase/repository.go +++ b/src/module/pendaftaran_sidsem/internal/usecase/repository.go @@ -21,4 +21,7 @@ type PendaftaranSidSemRepository interface { GetDosbingNamePlaceholder(idMahasiswa string) (entity.DosbingName, error) GetPendaftaranTaIdByMahasiswa(idMahasiswa string) (string, error) GetPendaftaran(offset, size int) (output []entity.RekapPendaftaranRequest, err error) + IsRegisteredSidsem(idMahasiswa string, tipe string) (string, error) + GetInfoTopikMahasiswa(idMahasiswa string) (entity.InfoTopikMahasiswa, error) + GetRemainingDetailSidSem(idMahasiswa string) (entity.RemainingDetailSidSem, error) } diff --git a/src/module/pendaftaran_sidsem/transport/mahasiswa_handler.go b/src/module/pendaftaran_sidsem/transport/mahasiswa_handler.go index 13bf2db8c7a4f75c8ae570bc8629ed1ecb72817c..1f5bdd39b37d8a17037dda235c3b287d16fa53aa 100644 --- a/src/module/pendaftaran_sidsem/transport/mahasiswa_handler.go +++ b/src/module/pendaftaran_sidsem/transport/mahasiswa_handler.go @@ -28,6 +28,8 @@ func NewMahasiswaPendaftaranSidSemHandler(cfg config.PendaftaranSidSemTransportC func (t *MahasiswaPendaftaranSidSemHandler) MountMahasiswa(group *echo.Group) { group.GET("/get-placeholders", t.GetPlaceholders) group.POST("/pendaftaran-sidsem", t.AddPendaftaran) + group.GET("/is-registered-sidsem", t.IsRegisteredSidsem) + group.GET("/get-sidsem-detail", t.GetSidSemDetailByMahasiswaId) } func (t *MahasiswaPendaftaranSidSemHandler) AddPendaftaran(c echo.Context) error { @@ -53,3 +55,33 @@ func (t *MahasiswaPendaftaranSidSemHandler) GetPlaceholders(c echo.Context) erro return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusCreated, "Placeholders retrieved successfully", placeholders)) } + +func (t *MahasiswaPendaftaranSidSemHandler) IsRegisteredSidsem(c echo.Context) error { + tipe := c.QueryParam("tipe") + payload, ok := c.Get("authPayload").(utils.Payload) + if !ok { + return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, "Error parsing id", nil)) + } + + result, err := t.pendaftaranSidSemUsecase.IsRegisteredSidsem(payload.ID, tipe) + if err != nil { + return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, err.Error(), nil)) + } + + return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusCreated, "Is Registered retrieved successfully", result)) +} + +func (t *MahasiswaPendaftaranSidSemHandler) GetSidSemDetailByMahasiswaId(c echo.Context) error { + tipe := c.QueryParam("tipe") + payload, ok := c.Get("authPayload").(utils.Payload) + if !ok { + return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, "Error parsing id", nil)) + } + + result, err := t.pendaftaranSidSemUsecase.GetSidSemDetailByMahasiswaId(payload.ID, tipe) + if err != nil { + return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, err.Error(), nil)) + } + + return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusCreated, "Sidsem Detail retrieved successfully", result)) +}