diff --git a/src/models/PendaftaranTA.go b/src/models/PendaftaranTA.go index 044aea676aaead1b301cad5b25d9c1ffc985503a..269de8b25b42e5423852cf6bd3d718f4d3776015 100644 --- a/src/models/PendaftaranTA.go +++ b/src/models/PendaftaranTA.go @@ -2,13 +2,13 @@ package models import "time" -type pendaftaran_ta_status_enum string +type Pendaftaran_ta_status_enum string const ( - NOT_ASSIGNED pendaftaran_ta_status_enum = "NOT_ASSIGNED" - INTERVIEW pendaftaran_ta_status_enum = "INTERVIEW" - APPROVED pendaftaran_ta_status_enum = "APPROVED" - REJECTED pendaftaran_ta_status_enum = "REJECTED" + NOT_ASSIGNED Pendaftaran_ta_status_enum = "NOT_ASSIGNED" + INTERVIEW Pendaftaran_ta_status_enum = "INTERVIEW" + APPROVED Pendaftaran_ta_status_enum = "APPROVED" + REJECTED Pendaftaran_ta_status_enum = "REJECTED" ) type PendaftaranTA struct { @@ -16,7 +16,7 @@ type PendaftaranTA struct { IdTopik string `gorm:"type:uuid"` IdMahasiswa string `gorm:"type:uuid"` IdDosen string `gorm:"type:uuid"` - Status pendaftaran_ta_status_enum `gorm:"type:pendaftaran_ta_status_enum;default:NOT_ASSIGNED"` + Status Pendaftaran_ta_status_enum `gorm:"type:pendaftaran_ta_status_enum;default:NOT_ASSIGNED"` JalurPilihan string `gorm:"default:null"` InterviewAt time.Time `gorm:"default:null"` DecidedAt time.Time `gorm:"default:null"` diff --git a/src/module/pendaftaran/entity/pendaftaran.go b/src/module/pendaftaran/entity/pendaftaran.go index 513b172428d0fde790a4289909bb2c6b6c57eb77..09e4904282236046a694b2e54ac1b0b2c65146df 100644 --- a/src/module/pendaftaran/entity/pendaftaran.go +++ b/src/module/pendaftaran/entity/pendaftaran.go @@ -15,6 +15,19 @@ type Pendaftaran struct { IdPeriode string } +type PendaftaranGetResponse struct { + Id string + Status string + InterviewAt time.Time + DecidedAt time.Time + WaktuPengiriman time.Time + Judul string + Deskripsi string + IdDosen string + NamaDosen string + EmailDosen string +} + type ParamValues struct { Limit int Offset int @@ -29,7 +42,7 @@ type PendaftaranAddRequest struct { type UpdatePendaftaranRequest struct { Id string - Status bool + Status string } type WaktuInterviewUpdateRequest struct { diff --git a/src/module/pendaftaran/internal/repository/pendaftaran.go b/src/module/pendaftaran/internal/repository/pendaftaran.go index 9934ad6abbfcf1c9575fb9c539fa4725dbfb6559..d9ea29b8b7fa766652e619d1f47a08c46ec4a593 100644 --- a/src/module/pendaftaran/internal/repository/pendaftaran.go +++ b/src/module/pendaftaran/internal/repository/pendaftaran.go @@ -4,6 +4,7 @@ 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/entity" "gorm.io/gorm" ) @@ -20,29 +21,28 @@ func NewPendaftaranRepository(dbWrite *gorm.DB, dbRead *gorm.DB) *PendaftaranRep } } -func (repo *PendaftaranRepo) NewPendaftaran(pendaftaran entity.Pendaftaran) (output entity.Pendaftaran, err error) { - pendaftaran.Id = uuid.New().String() - pendaftaran.CreatedAt = time.Now() - pendaftaran.UpdatedAt = time.Now() - +func (repo *PendaftaranRepo) NewPendaftaran(pendaftaran models.PendaftaranTA) (output models.PendaftaranTA, err error) { + pendaftaran.ID = uuid.New().String() + pendaftaran.WaktuPengiriman = time.Now() + pendaftaran.Status = models.Pendaftaran_ta_status_enum("NOT_ASSIGNED") result := repo.DBWrite.Create(&pendaftaran) if result.Error != nil { - return entity.Pendaftaran{}, result.Error + return models.PendaftaranTA{}, result.Error } return pendaftaran, nil } -func (repo *PendaftaranRepo) GetPendaftaran() (output []entity.Pendaftaran, err error) { - var batches []entity.Pendaftaran - result := repo.DBRead.Find(&batches) +func (repo *PendaftaranRepo) GetPendaftaran() (output []models.PendaftaranTA, err error) { + var pendaftaran []models.PendaftaranTA + result := repo.DBRead.Find(&pendaftaran) if result.Error != nil { return nil, err } - return batches, nil + return pendaftaran, nil } -func (repo *PendaftaranRepo) DeletePendaftaran(id string) (entity.Pendaftaran, error) { - batch := entity.Pendaftaran{Id: id} +func (repo *PendaftaranRepo) DeletePendaftaran(id string) (models.PendaftaranTA, error) { + batch := models.PendaftaranTA{ID: id} err := repo.DBWrite.Delete(&batch).Error if err != nil { @@ -52,29 +52,67 @@ func (repo *PendaftaranRepo) DeletePendaftaran(id string) (entity.Pendaftaran, e return batch, err } -func (repo *PendaftaranRepo) GetPendaftaranByIdDosen(id string) (output []entity.Pendaftaran, err error) { - var pendaftaran []entity.Pendaftaran - result := repo.DBRead.Where("id = ?", id).Find(&pendaftaran) +func (repo *PendaftaranRepo) GetPendaftaranByIdDosen(id string) (output []models.PendaftaranTA, err error) { + var pendaftaran []models.PendaftaranTA + result := repo.DBRead.Where("id_dosen = ?", id).Find(&pendaftaran) if result.Error != nil { return nil, err } return pendaftaran, nil } -func (repo *PendaftaranRepo) SetStatus(id string, val bool) (output []entity.Pendaftaran, err error) { - var pendaftaran entity.Pendaftaran +func (repo *PendaftaranRepo) GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error) { + var pendaftaran models.PendaftaranTA + var dosen models.Pengguna + var data entity.PendaftaranGetResponse + var status string + var topik models.Topik + + res := repo.DBRead.Where("id_mahasiswa = ?", id).Find(&pendaftaran).Limit(1) + if res.Error != nil { + return data, res.Error + } + + res = repo.DBRead.Where("id = ?", pendaftaran.IdDosen).Find(&dosen).Limit(1) + if res.Error != nil { + return data, res.Error + } + + res = repo.DBRead.Where("id = ?", pendaftaran.IdTopik).Find(&topik).Limit(1) + if res.Error != nil { + return data, res.Error + } + + data = entity.PendaftaranGetResponse{ + Id: pendaftaran.ID, + Status: status, + InterviewAt: pendaftaran.InterviewAt, + DecidedAt: pendaftaran.DecidedAt, + WaktuPengiriman: pendaftaran.WaktuPengiriman, + Judul: topik.Judul, + Deskripsi: topik.Deskripsi, + IdDosen: pendaftaran.IdDosen, + NamaDosen: dosen.Nama, + EmailDosen: dosen.Email, + } + + if res.Error != nil { + return data, err + } + return data, nil +} + +func (repo *PendaftaranRepo) SetStatus(id string, val string) (output []models.PendaftaranTA, err error) { + var pendaftaran models.PendaftaranTA result := repo.DBRead.Where("id = ?", id).First(&pendaftaran) if result.Error != nil { return nil, result.Error } - pendaftaran.Status = &val - pendaftaran.UpdatedAt = time.Now() - if val { + pendaftaran.Status = models.Pendaftaran_ta_status_enum(val) + if val == "APPROVED" || val == "REJECTED" { now := time.Now() - pendaftaran.DecidedAt = &now - } else { - pendaftaran.DecidedAt = nil + pendaftaran.DecidedAt = now } result = repo.DBRead.Save(&pendaftaran) @@ -82,29 +120,29 @@ func (repo *PendaftaranRepo) SetStatus(id string, val bool) (output []entity.Pen return nil, result.Error } - return []entity.Pendaftaran{pendaftaran}, nil + return []models.PendaftaranTA{pendaftaran}, nil } -func (repo *PendaftaranRepo) SetTimeInterview(id string, val time.Time) (output []entity.Pendaftaran, err error) { - var pendaftaran entity.Pendaftaran +func (repo *PendaftaranRepo) SetTimeInterview(id string, val time.Time) (output []models.PendaftaranTA, err error) { + var pendaftaran models.PendaftaranTA result := repo.DBRead.Where("id = ?", id).First(&pendaftaran) if result.Error != nil { return nil, result.Error } - pendaftaran.UpdatedAt = time.Now() - pendaftaran.InterviewAt = &val + pendaftaran.InterviewAt = val + pendaftaran.Status = models.Pendaftaran_ta_status_enum("INTERVIEW") result = repo.DBRead.Save(&pendaftaran) if result.Error != nil { return nil, result.Error } - return []entity.Pendaftaran{pendaftaran}, nil + return []models.PendaftaranTA{pendaftaran}, nil } -func (repo *PendaftaranRepo) GetPendaftaranByPeriode(idPeriode string) (output []entity.Pendaftaran, err error) { - var periode []entity.Pendaftaran +func (repo *PendaftaranRepo) GetPendaftaranByPeriode(idPeriode string) (output []models.PendaftaranTA, err error) { + var periode []models.PendaftaranTA result := repo.DBRead.Where("id_periode = ?", idPeriode).Find(&periode) if result.Error != nil { return nil, err diff --git a/src/module/pendaftaran/internal/usecase/pendaftaran.go b/src/module/pendaftaran/internal/usecase/pendaftaran.go index b123e7e8b119ac74dff2227b9b70d55e913ca87a..13883e5cae5556ee8a9b6960f58f81232c5b6df4 100644 --- a/src/module/pendaftaran/internal/usecase/pendaftaran.go +++ b/src/module/pendaftaran/internal/usecase/pendaftaran.go @@ -3,17 +3,19 @@ package usecase import ( "time" + "gitlab.informatika.org/k-01-11/graduit-be/src/models" "gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/entity" ) type PendaftaranUsecase interface { - AddPendaftaran(pendaftaran entity.Pendaftaran) (entity.Pendaftaran, error) - GetPendaftaran() ([]entity.Pendaftaran, error) - DeletePendaftaran(id string) (entity.Pendaftaran, error) - GetPendaftaranByIdDosen(id string) ([]entity.Pendaftaran, error) - UpdateStatusPendaftaran(id string, val bool) ([]entity.Pendaftaran, error) - UpdateWaktuInterview(id string, val time.Time) ([]entity.Pendaftaran, error) - GetPendaftaranByPeriode(id string) ([]entity.Pendaftaran, error) + AddPendaftaran(pendaftaran models.PendaftaranTA) (models.PendaftaranTA, error) + GetPendaftaran() (output []models.PendaftaranTA, err error) + DeletePendaftaran(id string) (output models.PendaftaranTA, err error) + GetPendaftaranByIdDosen(id string) (output []models.PendaftaranTA, err error) + UpdateStatusPendaftaran(id string, val string) (output []models.PendaftaranTA, err error) + UpdateWaktuInterview(id string, val time.Time) (output []models.PendaftaranTA, err error) + GetPendaftaranByPeriode(id string) (output []models.PendaftaranTA, err error) + GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error) } type PendaftaranUc struct { @@ -26,7 +28,7 @@ func NewPendaftaranUseCase(pendaftaranRepo PendaftaranRepository) *PendaftaranUc } } -func (uc *PendaftaranUc) AddPendaftaran(pendaftaran entity.Pendaftaran) (entity.Pendaftaran, error) { +func (uc *PendaftaranUc) AddPendaftaran(pendaftaran models.PendaftaranTA) (models.PendaftaranTA, error) { newPendaftaran, err := uc.pendaftaranRepo.NewPendaftaran(pendaftaran) if err != nil { @@ -37,26 +39,30 @@ func (uc *PendaftaranUc) AddPendaftaran(pendaftaran entity.Pendaftaran) (entity. } -func (uc *PendaftaranUc) GetPendaftaran() ([]entity.Pendaftaran, error) { +func (uc *PendaftaranUc) GetPendaftaran() (output []models.PendaftaranTA, err error) { return uc.pendaftaranRepo.GetPendaftaran() } -func (uc *PendaftaranUc) DeletePendaftaran(id string) (entity.Pendaftaran, error) { +func (uc *PendaftaranUc) DeletePendaftaran(id string) (output models.PendaftaranTA, err error) { return uc.pendaftaranRepo.DeletePendaftaran(id) } -func (uc *PendaftaranUc) GetPendaftaranByIdDosen(id string) ([]entity.Pendaftaran, error) { +func (uc *PendaftaranUc) GetPendaftaranByIdDosen(id string) (output []models.PendaftaranTA, err error) { return uc.pendaftaranRepo.GetPendaftaranByIdDosen(id) } -func (uc *PendaftaranUc) UpdateStatusPendaftaran(id string, val bool) ([]entity.Pendaftaran, error) { +func (uc *PendaftaranUc) UpdateStatusPendaftaran(id string, val string) (output []models.PendaftaranTA, err error) { return uc.pendaftaranRepo.SetStatus(id, val) } -func (uc *PendaftaranUc) UpdateWaktuInterview(id string, val time.Time) ([]entity.Pendaftaran, error) { +func (uc *PendaftaranUc) UpdateWaktuInterview(id string, val time.Time) (output []models.PendaftaranTA, err error) { return uc.pendaftaranRepo.SetTimeInterview(id, val) } -func (uc *PendaftaranUc) GetPendaftaranByPeriode(id string) ([]entity.Pendaftaran, error) { +func (uc *PendaftaranUc) GetPendaftaranByPeriode(id string) (output []models.PendaftaranTA, err error) { return uc.pendaftaranRepo.GetPendaftaranByPeriode(id) } + +func (uc *PendaftaranUc) GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error) { + return uc.pendaftaranRepo.GetPendaftaranById(id) +} diff --git a/src/module/pendaftaran/internal/usecase/repository.go b/src/module/pendaftaran/internal/usecase/repository.go index fcabc161002e919c4e29255090bee78e22e398ed..fcd4a7344face1987f659ff8c2935ad715a950ed 100644 --- a/src/module/pendaftaran/internal/usecase/repository.go +++ b/src/module/pendaftaran/internal/usecase/repository.go @@ -3,15 +3,17 @@ package usecase import ( "time" + "gitlab.informatika.org/k-01-11/graduit-be/src/models" "gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/entity" ) type PendaftaranRepository interface { - NewPendaftaran(pendaftaran entity.Pendaftaran) (output entity.Pendaftaran, err error) - GetPendaftaran() (output []entity.Pendaftaran, err error) - DeletePendaftaran(id string) (entity.Pendaftaran, error) - GetPendaftaranByIdDosen(id string) (output []entity.Pendaftaran, err error) - SetStatus(id string, val bool) (output []entity.Pendaftaran, err error) - SetTimeInterview(id string, val time.Time) (output []entity.Pendaftaran, err error) - GetPendaftaranByPeriode(idPeriode string) (output []entity.Pendaftaran, err error) + NewPendaftaran(pendaftaran models.PendaftaranTA) (output models.PendaftaranTA, err error) + GetPendaftaran() (output []models.PendaftaranTA, err error) + DeletePendaftaran(id string) (models.PendaftaranTA, error) + GetPendaftaranByIdDosen(id string) (output []models.PendaftaranTA, err error) + SetStatus(id string, val string) (output []models.PendaftaranTA, err error) + SetTimeInterview(id string, val time.Time) (output []models.PendaftaranTA, err error) + GetPendaftaranByPeriode(idPeriode string) (output []models.PendaftaranTA, err error) + GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error) } diff --git a/src/module/pendaftaran/transport/admin_handler.go b/src/module/pendaftaran/transport/admin_handler.go index 17d7b183c97f8dfe9ba6402b566a797c6d88ec79..822e0f9bab736193fd13e8611a9c39a668081f34 100644 --- a/src/module/pendaftaran/transport/admin_handler.go +++ b/src/module/pendaftaran/transport/admin_handler.go @@ -4,6 +4,7 @@ import ( "net/http" "github.com/labstack/echo/v4" + "gitlab.informatika.org/k-01-11/graduit-be/src/models" "gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/config" "gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/entity" "gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran/internal/repository" @@ -33,6 +34,7 @@ func (t *AdminPendaftaranHandler) MountAdmin(group *echo.Group) { group.POST("/pendaftaran-update-status", t.UpdateStatusPendaftaran) group.POST("/pendaftaran-update-interview", t.UpdateWaktuInterview) group.GET("/pendaftaran-by-periode", t.GetPendaftaranByPeriode) + group.GET("/pendaftaran-by-id", t.GetPendaftaranById) } // AddPendaftaran adds a new pendaftaran record. @@ -50,11 +52,10 @@ func (t *AdminPendaftaranHandler) AddPendaftaran(c echo.Context) error { return c.JSON(http.StatusBadRequest, utils.ResponseDetailOutput(false, http.StatusBadRequest, err.Error(), nil)) } - target := &entity.Pendaftaran{ + target := &models.PendaftaranTA{ IdTopik: request.IdTopik, IdMahasiswa: request.IdMahasiswa, IdDosen: request.IdDosen, - IdPeriode: request.IdPeriode, } newPendaftaran, err := t.pendaftaranUsecase.AddPendaftaran(*target) @@ -93,6 +94,16 @@ func (t *AdminPendaftaranHandler) GetPendaftaranByIdDosen(c echo.Context) error return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusOK, "Pendaftaran successfully retreived", listGroupLimit)) } +func (t *AdminPendaftaranHandler) GetPendaftaranById(c echo.Context) error { + id := c.QueryParam("id") + listGroupLimit, err := t.pendaftaranUsecase.GetPendaftaranById(id) + 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 retreived", listGroupLimit)) +} + // DeletePendaftaran deletes a pendaftaran record. // @Summary Delete pendaftaran // @Description Deletes a pendaftaran record.