From a4cf4727bf74883b36429a2b4bb30c40ffb98caa Mon Sep 17 00:00:00 2001
From: Alex Sander <13521061@std.stei.itb.ac.id>
Date: Thu, 23 May 2024 22:02:24 +0700
Subject: [PATCH] fix: refactor and wiring pendaftaran

---
 .../internal/repository/pendaftaran.go        | 55 ++++++++++---------
 .../internal/usecase/pendaftaran.go           |  4 +-
 .../internal/usecase/repository.go            |  2 +-
 3 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/src/module/pendaftaran/internal/repository/pendaftaran.go b/src/module/pendaftaran/internal/repository/pendaftaran.go
index d9ea29b..62c8e44 100644
--- a/src/module/pendaftaran/internal/repository/pendaftaran.go
+++ b/src/module/pendaftaran/internal/repository/pendaftaran.go
@@ -61,39 +61,42 @@ func (repo *PendaftaranRepo) GetPendaftaranByIdDosen(id string) (output []models
 	return pendaftaran, nil
 }
 
-func (repo *PendaftaranRepo) GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error) {
-	var pendaftaran models.PendaftaranTA
+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 data []entity.PendaftaranGetResponse
 	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)
+	res := repo.DBRead.Where("id_mahasiswa = ?", id).Find(&pendaftaran)
 	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,
+	for _, pen := range pendaftaran {
+		res = repo.DBRead.Where("id = ?", pen.IdDosen).Find(&dosen).Limit(1)
+		if res.Error != nil {
+			return data, res.Error
+		}
+
+		res = repo.DBRead.Where("id = ?", pen.IdTopik).Find(&topik).Limit(1)
+		if res.Error != nil {
+			return data, res.Error
+		}
+
+		var dataTemp = entity.PendaftaranGetResponse{
+			Id:              pen.ID,
+			Status:          string(pen.Status),
+			InterviewAt:     pen.InterviewAt,
+			DecidedAt:       pen.DecidedAt,
+			WaktuPengiriman: pen.WaktuPengiriman,
+			Judul:           topik.Judul,
+			Deskripsi:       topik.Deskripsi,
+			IdDosen:         pen.IdDosen,
+			NamaDosen:       dosen.Nama,
+			EmailDosen:      dosen.Email,
+		}
+
+		data = append(data, dataTemp)
 	}
 
 	if res.Error != nil {
diff --git a/src/module/pendaftaran/internal/usecase/pendaftaran.go b/src/module/pendaftaran/internal/usecase/pendaftaran.go
index 13883e5..be53ada 100644
--- a/src/module/pendaftaran/internal/usecase/pendaftaran.go
+++ b/src/module/pendaftaran/internal/usecase/pendaftaran.go
@@ -15,7 +15,7 @@ type PendaftaranUsecase interface {
 	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)
+	GetPendaftaranById(id string) (output []entity.PendaftaranGetResponse, err error)
 }
 
 type PendaftaranUc struct {
@@ -63,6 +63,6 @@ func (uc *PendaftaranUc) GetPendaftaranByPeriode(id string) (output []models.Pen
 	return uc.pendaftaranRepo.GetPendaftaranByPeriode(id)
 }
 
-func (uc *PendaftaranUc) GetPendaftaranById(id string) (output entity.PendaftaranGetResponse, err error) {
+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 fcd4a73..a647e3b 100644
--- a/src/module/pendaftaran/internal/usecase/repository.go
+++ b/src/module/pendaftaran/internal/usecase/repository.go
@@ -15,5 +15,5 @@ type PendaftaranRepository interface {
 	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)
+	GetPendaftaranById(id string) (output []entity.PendaftaranGetResponse, err error)
 }
-- 
GitLab