From 2afd47ddfe24bada96d3000904619c00bafad967 Mon Sep 17 00:00:00 2001
From: farhanfahreezy <mohdfarhanfahrezy@gmail.com>
Date: Sun, 24 Mar 2024 17:42:18 +0700
Subject: [PATCH] feat: get jumlah mahasiswa by jurusan

---
 .../internal/repository/dashboard_dosbing.go  | 33 ++++++++++++++++++
 .../internal/usecase/dashboard_dosbing.go     | 22 ++++++++++++
 .../internal/usecase/repository.go            |  2 ++
 .../transport/admin_handler.go                | 34 +++++++++++++++++++
 4 files changed, 91 insertions(+)

diff --git a/src/module/dashboard_dosbing/internal/repository/dashboard_dosbing.go b/src/module/dashboard_dosbing/internal/repository/dashboard_dosbing.go
index b779e8b..a035311 100644
--- a/src/module/dashboard_dosbing/internal/repository/dashboard_dosbing.go
+++ b/src/module/dashboard_dosbing/internal/repository/dashboard_dosbing.go
@@ -58,3 +58,36 @@ func (repo *DashboardDosbingRepo) GetMahasiswaByDosenId(idDosen string, offset,
 	return mahasiswaBimbingan, nil
 
 }
+
+func (repo *DashboardDosbingRepo) GetAmountMahasiswaByDosenId(idDosen string) (output []entity.JumlahMahasiswa, err error) {
+	var jumlahMahasiswa entity.JumlahMahasiswa
+
+	var dosen models.Dosen
+	var mahasiswa []models.Mahasiswa
+
+	result := repo.DBRead.Where("id_dosen = ?", idDosen).First(&dosen)
+	if result.Error != nil {
+		return nil, errors.New("dosen tidak ditemukan")
+	}
+
+	// Mahasiswa IF
+	result = repo.DBRead.Where("id_dosen = ? AND NIM LIKE ?", dosen.IdDosen, "135%").Find(&mahasiswa)
+	if result.Error != nil {
+		jumlahMahasiswa.MahasiswaIF = 0
+	}
+	jumlahMahasiswa.MahasiswaIF = int(result.RowsAffected)
+
+	// Mahasiswa STI
+	result = repo.DBRead.Where("id_dosen = ? AND NIM LIKE ?", dosen.IdDosen, "182%").Find(&mahasiswa)
+	if result.Error != nil {
+		jumlahMahasiswa.MahasiswaSTI = 0
+	}
+	jumlahMahasiswa.MahasiswaSTI = int(result.RowsAffected)
+
+	return []entity.JumlahMahasiswa{jumlahMahasiswa}, nil
+
+}
+
+func (repo *DashboardDosbingRepo) GetAmountStatusBimbinganMahasiswaByDosenId(idDosen string) (output []entity.StatusBimbinganMahasiswa, err error) {
+	return nil, errors.New("Not implemented")
+}
diff --git a/src/module/dashboard_dosbing/internal/usecase/dashboard_dosbing.go b/src/module/dashboard_dosbing/internal/usecase/dashboard_dosbing.go
index 69b982e..4029697 100644
--- a/src/module/dashboard_dosbing/internal/usecase/dashboard_dosbing.go
+++ b/src/module/dashboard_dosbing/internal/usecase/dashboard_dosbing.go
@@ -4,6 +4,8 @@ import "gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/e
 
 type DashboardDosbingUseCase interface {
 	GetMahasiswaByDosenId(idDosen string, offset, size int) (output []entity.MahasiswaBimbingan, err error)
+	GetAmountMahasiswaByDosenId(idDosen string) (output []entity.JumlahMahasiswa, err error)
+	GetAmountStatusBimbinganMahasiswaByDosenId(idDosen string) (output []entity.StatusBimbinganMahasiswa, err error)
 }
 
 type DashboardDosbingUc struct {
@@ -25,3 +27,23 @@ func (uc *DashboardDosbingUc) GetMahasiswaByDosenId(idDosen string, offset, size
 
 	return listMahasiswa, nil
 }
+
+func (uc *DashboardDosbingUc) GetAmountMahasiswaByDosenId(idDosen string) (output []entity.JumlahMahasiswa, err error) {
+	listMahasiswa, err := uc.dashboardDosbingRepo.GetAmountMahasiswaByDosenId(idDosen)
+
+	if err != nil {
+		return listMahasiswa, err
+	}
+
+	return listMahasiswa, nil
+}
+
+func (uc *DashboardDosbingUc) GetAmountStatusBimbinganMahasiswaByDosenId(idDosen string) (output []entity.StatusBimbinganMahasiswa, err error) {
+	listMahasiswa, err := uc.dashboardDosbingRepo.GetAmountStatusBimbinganMahasiswaByDosenId(idDosen)
+
+	if err != nil {
+		return listMahasiswa, err
+	}
+
+	return listMahasiswa, nil
+}
diff --git a/src/module/dashboard_dosbing/internal/usecase/repository.go b/src/module/dashboard_dosbing/internal/usecase/repository.go
index 055ef9d..0d7f821 100644
--- a/src/module/dashboard_dosbing/internal/usecase/repository.go
+++ b/src/module/dashboard_dosbing/internal/usecase/repository.go
@@ -4,4 +4,6 @@ import "gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/e
 
 type DashboardDosbingRepository interface {
 	GetMahasiswaByDosenId(idDosen string, offset, size int) (output []entity.MahasiswaBimbingan, err error)
+	GetAmountMahasiswaByDosenId(idDosen string) (output []entity.JumlahMahasiswa, err error)
+	GetAmountStatusBimbinganMahasiswaByDosenId(idDosen string) (output []entity.StatusBimbinganMahasiswa, err error)
 }
diff --git a/src/module/dashboard_dosbing/transport/admin_handler.go b/src/module/dashboard_dosbing/transport/admin_handler.go
index c03ba9f..0786eed 100644
--- a/src/module/dashboard_dosbing/transport/admin_handler.go
+++ b/src/module/dashboard_dosbing/transport/admin_handler.go
@@ -26,6 +26,8 @@ func NewAdminDashboardDosbingHandler(cfg config.DashboardDosbingTransportConfig)
 
 func (t *AdminDashboardDosbingHandler) MountAdmin(group *echo.Group) {
 	group.GET("/dashboard-dosbing", t.GetMahasiswaByDosenId)
+	group.GET("/dashboard-dosbing/jurusan", t.GetAmountMahasiswaByDosenId)
+	group.GET("/dashboard-dosbing/bimbingan", t.GetAmountStatusBimbinganMahasiswaByDosenId)
 }
 
 func (t *AdminDashboardDosbingHandler) GetMahasiswaByDosenId(c echo.Context) error {
@@ -57,3 +59,35 @@ func (t *AdminDashboardDosbingHandler) GetMahasiswaByDosenId(c echo.Context) err
 	return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusOK, "List mahasiswa successfully retreived", listMahasiswa))
 
 }
+
+func (t *AdminDashboardDosbingHandler) GetAmountMahasiswaByDosenId(c echo.Context) error {
+	idDosen := c.QueryParam("id_dosen")
+
+	if idDosen == "" {
+		return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, "insert id_dosen", nil))
+	}
+
+	listMahasiswa, err := t.dashboardDosbingUseCase.GetAmountMahasiswaByDosenId(idDosen)
+	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, "List mahasiswa successfully retreived", listMahasiswa[0]))
+
+}
+
+func (t *AdminDashboardDosbingHandler) GetAmountStatusBimbinganMahasiswaByDosenId(c echo.Context) error {
+	idDosen := c.QueryParam("id_dosen")
+
+	if idDosen == "" {
+		return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, "insert id_dosen", nil))
+	}
+
+	listMahasiswa, err := t.dashboardDosbingUseCase.GetAmountStatusBimbinganMahasiswaByDosenId(idDosen)
+	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, "List mahasiswa successfully retreived", listMahasiswa[0]))
+
+}
-- 
GitLab