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