Skip to content
Snippets Groups Projects
Commit 5b266e4e authored by Hosea Nathanael Abetnego's avatar Hosea Nathanael Abetnego
Browse files

Merge branch 'story/dashboard-dosbing' into 'main'

Story/dashboard dosbing

See merge request !12
parents f9fc87ff 68554ace
2 merge requests!12Story/dashboard dosbing,!7deploy
Pipeline #61392 failed with stages
in 25 minutes and 18 seconds
......@@ -8,6 +8,8 @@ import (
batchSidangTransport "gitlab.informatika.org/k-01-11/graduit-be/src/module/batch_sidang/transport"
bimbinganLogConfig "gitlab.informatika.org/k-01-11/graduit-be/src/module/bimbingan_log/config"
bimbinganLogTransport "gitlab.informatika.org/k-01-11/graduit-be/src/module/bimbingan_log/transport"
dashboardDosbingConfig "gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/config"
dashboardDosbingTrasport "gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/transport"
jadwalSeminarConfig "gitlab.informatika.org/k-01-11/graduit-be/src/module/jadwal_seminar/config"
jadwalSeminarTransport "gitlab.informatika.org/k-01-11/graduit-be/src/module/jadwal_seminar/transport"
jadwalSidangConfig "gitlab.informatika.org/k-01-11/graduit-be/src/module/jadwal_sidang/config"
......@@ -23,15 +25,16 @@ import (
)
type Service struct {
InternalSystemLogHandler *systemLogTransport.InternalSystemLogHandler
AdminSytemLogHandler *systemLogTransport.AdminSystemLogHandler
AdminBimbinganLogHandler *bimbinganLogTransport.AdminBimbinganLogHandler
AdminTopicAllocationHandler *topicAllocationTransport.AdminTopicAllocationHandler
BatchSeminarHandler *batchSeminarTransport.AdminBatchSeminarHandler
BatchSidangHandler *batchSidangTransport.AdminBatchSidangHandler
JadwalSidangHandler *jadwalSidangTransport.AdminJadwalSidangHandler
JadwalSeminarHandler *jadwalSeminarTransport.AdminJadwalSeminarHandler
AdminStatusMahasiswaHandler *statusMahasiswaTransport.AdminStatusMahasiswaHandler
InternalSystemLogHandler *systemLogTransport.InternalSystemLogHandler
AdminSytemLogHandler *systemLogTransport.AdminSystemLogHandler
AdminBimbinganLogHandler *bimbinganLogTransport.AdminBimbinganLogHandler
AdminTopicAllocationHandler *topicAllocationTransport.AdminTopicAllocationHandler
BatchSeminarHandler *batchSeminarTransport.AdminBatchSeminarHandler
BatchSidangHandler *batchSidangTransport.AdminBatchSidangHandler
JadwalSidangHandler *jadwalSidangTransport.AdminJadwalSidangHandler
JadwalSeminarHandler *jadwalSeminarTransport.AdminJadwalSeminarHandler
AdminStatusMahasiswaHandler *statusMahasiswaTransport.AdminStatusMahasiswaHandler
AdminDashboardDosbingHandler *dashboardDosbingTrasport.AdminDashboardDosbingHandler
AdminPendaftaranHandler *pendaftaranTransport.AdminPendaftaranHandler
}
......@@ -75,21 +78,26 @@ func MakeHandler() *Service {
DBWrite: dbWrite,
DBRead: dbRead,
})
AdminDashboardDosbingHandler := dashboardDosbingTrasport.NewAdminDashboardDosbingHandler(dashboardDosbingConfig.DashboardDosbingTransportConfig{
DBWrite: dbWrite,
DBRead: dbRead,
})
AdminPendaftaranHandler := pendaftaranTransport.NewAdminPendaftaranHandler(pendaftaranConfig.PendaftaranTransportConfig{
DBWrite: dbWrite,
DBRead: dbRead,
})
return &Service{
InternalSystemLogHandler: InternalSystemLogHandler,
AdminSytemLogHandler: AdminSystemLogHandler,
AdminBimbinganLogHandler: AdminBimbinganLogHandler,
AdminTopicAllocationHandler: AdminTopicAllocationHandler,
BatchSeminarHandler: AdminBatchSeminarHandler,
BatchSidangHandler: AdminBatchSidangHandler,
JadwalSidangHandler: AdminJadwalSidangHandler,
JadwalSeminarHandler: AdminJadwalSeminarHandler,
AdminStatusMahasiswaHandler: AdminStatusMahasiswaHandler,
InternalSystemLogHandler: InternalSystemLogHandler,
AdminSytemLogHandler: AdminSystemLogHandler,
AdminBimbinganLogHandler: AdminBimbinganLogHandler,
AdminTopicAllocationHandler: AdminTopicAllocationHandler,
BatchSeminarHandler: AdminBatchSeminarHandler,
BatchSidangHandler: AdminBatchSidangHandler,
JadwalSidangHandler: AdminJadwalSidangHandler,
JadwalSeminarHandler: AdminJadwalSeminarHandler,
AdminStatusMahasiswaHandler: AdminStatusMahasiswaHandler,
AdminDashboardDosbingHandler: AdminDashboardDosbingHandler,
AdminPendaftaranHandler: AdminPendaftaranHandler,
}
}
......@@ -29,6 +29,7 @@ func (s *Service) InitializeRoutes() *echo.Echo {
s.JadwalSeminarHandler.MountAdmin(adminGroup)
s.JadwalSidangHandler.MountAdmin(adminGroup)
s.AdminStatusMahasiswaHandler.MountAdmin(adminGroup)
s.AdminDashboardDosbingHandler.MountAdmin(adminGroup)
s.AdminPendaftaranHandler.MountAdmin(adminGroup)
return e
}
......
package config
import "gorm.io/gorm"
type DashboardDosbingTransportConfig struct {
DBWrite *gorm.DB
DBRead *gorm.DB
}
package entity
type JumlahMahasiswa struct {
MahasiswaIF int `json:"mahasiswa_if"`
MahasiswaSTI int `json:"mahasiswa_sti"`
}
type StatusBimbinganMahasiswa struct {
Lancar int `json:"lancar"`
ButuhBimbingan int `json:"butuh_bimbingan"`
Terkendala int `json:"terkendala"`
}
type MahasiswaBimbingan struct {
IdMahasiswa string `json:"id_mahasiswa"`
Nama string `json:"nama"`
NIM string `json:"nim"`
Topik string `json:"topik"`
Status string `json:"status"`
}
package repository
import (
"errors"
"gitlab.informatika.org/k-01-11/graduit-be/src/models"
"gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/entity"
"gorm.io/gorm"
)
type DashboardDosbingRepo struct {
DBWrite *gorm.DB
DBRead *gorm.DB
}
func NewDashboardDosbingRepository(dbWrite *gorm.DB, dbRead *gorm.DB) *DashboardDosbingRepo {
return &DashboardDosbingRepo{
DBWrite: dbWrite,
DBRead: dbRead,
}
}
func (repo *DashboardDosbingRepo) GetMahasiswaByDosenId(idDosen string, offset, size int) (output []entity.MahasiswaBimbingan, err error) {
var mahasiswaBimbingan []entity.MahasiswaBimbingan
var dosen models.Dosen
var mahasiswa []models.Mahasiswa
var topik models.Topik
var pendaftaran models.Pendaftaran
result := repo.DBRead.Where("id_dosen = ?", idDosen).First(&dosen)
if result.Error != nil {
return nil, errors.New("dosen tidak ditemukan")
}
result = repo.DBRead.Limit(size).Offset(offset).Where("id_dosen = ?", dosen.IdDosen).Find(&mahasiswa)
if result.Error != nil {
return nil, result.Error
}
for _, mhs := range mahasiswa {
repo.DBRead.Where("status = TRUE").First(&pendaftaran)
repo.DBRead.Where("id = ?", pendaftaran.IdTopik).First(&topik)
bimbingan := entity.MahasiswaBimbingan{
IdMahasiswa: mhs.IdMahasiswa,
Nama: mhs.Name,
NIM: mhs.NIM,
Topik: topik.Judul,
// TODO : KONEKIN KE STATUS
Status: "LANCAR",
}
mahasiswaBimbingan = append(mahasiswaBimbingan, bimbingan)
}
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")
}
package usecase
import "gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/entity"
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 {
dashboardDosbingRepo DashboardDosbingRepository
}
func NewDashboardDosbingUsecase(dashboardDosbingRepo DashboardDosbingRepository) *DashboardDosbingUc {
return &DashboardDosbingUc{
dashboardDosbingRepo: dashboardDosbingRepo,
}
}
func (uc *DashboardDosbingUc) GetMahasiswaByDosenId(idDosen string, offset, size int) (output []entity.MahasiswaBimbingan, err error) {
listMahasiswa, err := uc.dashboardDosbingRepo.GetMahasiswaByDosenId(idDosen, offset, size)
if err != nil {
return listMahasiswa, err
}
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
}
package usecase
import "gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/entity"
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)
}
package transport
import (
"net/http"
"strconv"
"github.com/labstack/echo"
"gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/config"
"gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/internal/repository"
"gitlab.informatika.org/k-01-11/graduit-be/src/module/dashboard_dosbing/internal/usecase"
"gitlab.informatika.org/k-01-11/graduit-be/src/utils"
)
type AdminDashboardDosbingHandler struct {
dashboardDosbingUseCase usecase.DashboardDosbingUseCase
}
func NewAdminDashboardDosbingHandler(cfg config.DashboardDosbingTransportConfig) *AdminDashboardDosbingHandler {
dashboardDosbingRepository := repository.NewDashboardDosbingRepository(cfg.DBWrite, cfg.DBRead)
dashboardDosbingUsecase := usecase.NewDashboardDosbingUsecase(dashboardDosbingRepository)
return &AdminDashboardDosbingHandler{
dashboardDosbingUseCase: dashboardDosbingUsecase,
}
}
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 {
idDosen := c.QueryParam("id_dosen")
sizeStr := c.QueryParam("limit")
offsetStr := c.QueryParam("offset")
if idDosen == "" {
return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, "insert id_dosen", nil))
}
size, err := strconv.Atoi(sizeStr)
if err != nil {
// Handle error, maybe return an error response
size = 10
}
offset, err := strconv.Atoi(offsetStr)
if err != nil {
// Handle error, maybe return an error response
offset = 0
}
listMahasiswa, err := t.dashboardDosbingUseCase.GetMahasiswaByDosenId(idDosen, offset, size)
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))
}
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]))
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment