diff --git a/src/cmd/__debug_bin1448138251 b/src/cmd/__debug_bin1448138251 new file mode 100755 index 0000000000000000000000000000000000000000..19e0187a543f4836ab706a97b3f2976d506548c1 Binary files /dev/null and b/src/cmd/__debug_bin1448138251 differ diff --git a/src/handler/handler.go b/src/handler/handler.go index 1b350781a5a56150a12318c748252e2a873f3cf0..66939c2f2fd73055acca2584a75504c4306a5623 100644 --- a/src/handler/handler.go +++ b/src/handler/handler.go @@ -45,6 +45,7 @@ type Service struct { DosbingBimbinganLogHandler *bimbinganLogTransport.DosbingimbinganLogHandler TIMTASchedulingHandler *schedulingTransport.TIMTASchedulingHandler MahasiswaPendaftaranSidSemHandler *pendaftaranSidSemTransport.MahasiswaPendaftaranSidSemHandler + TIMTAPendaftaranSidSemHandler *pendaftaranSidSemTransport.TIMTAPendaftaranSidSemHandler } func MakeHandler() *Service { @@ -104,6 +105,11 @@ func MakeHandler() *Service { DBWrite: dbWrite, }) + TIMTAPendaftaranSidSemHandler := pendaftaranSidSemTransport.NewTIMTAPendaftaranSidSemHandler(pendaftaranSidSemConfig.PendaftaranSidSemTransportConfig{ + DBRead: dbRead, + DBWrite: dbWrite, + }) + DosbingBimbinganLogHandler := bimbinganLogTransport.NewDosbingBimginganLogHandler(bimbinganLogConfig.BimbinganLogTransportConfig{ DBWrite: dbWrite, DBRead: dbRead, @@ -136,5 +142,6 @@ func MakeHandler() *Service { AdminDashboardTimTugasHandler: AdminDashboardTimTugasHandler, TIMTASchedulingHandler: TIMTASchedulingHandlerHandler, MahasiswaPendaftaranSidSemHandler: MahasiswaPendaftaranSidSemHandler, + TIMTAPendaftaranSidSemHandler: TIMTAPendaftaranSidSemHandler, } } diff --git a/src/handler/server.go b/src/handler/server.go index 099b50388b1428085012413787eff3b0d1416b2f..0e4a1f73b8a243465f2b5783df5f0f248c698638 100644 --- a/src/handler/server.go +++ b/src/handler/server.go @@ -59,8 +59,9 @@ func (s *Service) InitializeRoutes() *echo.Echo { s.DosbingDashboardHandler.MountDosbing(dosbingGroup) TIMTAGroup := e.Group("api/TIMTA") - TIMTAGroup.Use(middleware.Validator("TIM_TA")) + TIMTAGroup.Use(middleware.Validator("S1_TIM_TA")) s.TIMTASchedulingHandler.MountTIMTA(TIMTAGroup) + s.TIMTAPendaftaranSidSemHandler.MountTIMTA(TIMTAGroup) return e } diff --git a/src/middleware/validator.go b/src/middleware/validator.go index 629a505f4c48ffd7e849d67a0e3b534d34213ddd..41caab8b8603d497d599f3a469a7eaf89abf8254 100644 --- a/src/middleware/validator.go +++ b/src/middleware/validator.go @@ -1,6 +1,7 @@ package middleware import ( + "encoding/json" "net/http" "os" @@ -8,8 +9,6 @@ import ( "gitlab.informatika.org/k-01-11/graduit-be/src/utils" ) -// masih mentah baru raba2 - func Validator(expectedRole string) echo.MiddlewareFunc { return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { @@ -37,10 +36,21 @@ func Validator(expectedRole string) echo.MiddlewareFunc { } defer resp.Body.Close() + var payload utils.Payload + if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil { + return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, "Failed to decode response body", err)) + } + + if payload.Roles[0] != expectedRole { + return c.JSON(http.StatusForbidden, utils.ResponseDetailOutput(false, http.StatusForbidden, "Forbidden", err)) + } + if resp.StatusCode != http.StatusOK { return c.JSON(resp.StatusCode, utils.ResponseDetailOutput(false, resp.StatusCode, "Unauthorized", resp.Body)) } + c.Set("authPayload", payload) + return next(c) } } diff --git a/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go b/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go index 902eb66130babd5ca115a6c3b62a189cfb174c89..b9dcb561a8d422b3b884f5248f9f279d682ad5ac 100644 --- a/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go +++ b/src/module/pendaftaran_sidsem/internal/repository/pendaftaran_sidsem.go @@ -90,6 +90,46 @@ func (repo *PendaftaranSidSemRepo) GetPendaftaranByPeriode(idPeriode string, off return dataJadwal, nil } +func (repo *PendaftaranSidSemRepo) GetPendaftaran(offset, size int) (output []entity.PendaftaranSidSemRequest, err error) { + var pendaftaransidsem []models.PendaftaranSidSem + var pendaftaranTA models.PendaftaranTA + var mahasiswa models.Pengguna + var dataJadwal []entity.PendaftaranSidSemRequest + result := repo.DBRead.Limit(size).Offset(offset).Find(&pendaftaransidsem) + + for _, jadwal := range pendaftaransidsem { + print(jadwal.ID) + } + for _, jadwal := range pendaftaransidsem { + res := repo.DBRead.Where("id = ?", jadwal.PendaftaranTAID).Limit(1).Find(&pendaftaranTA) + if res.Error != nil { + return nil, res.Error + } + + res = repo.DBRead.Where("id = ?", pendaftaranTA.IdMahasiswa).Find(&mahasiswa) + if res.Error != nil { + return nil, res.Error + } + + data := entity.PendaftaranSidSemRequest{ + ID: jadwal.ID, + Nim: mahasiswa.NIM, + Nama: mahasiswa.Nama, + WaktuMulai: jadwal.WaktuMulai, + WaktuSelesai: jadwal.WaktuSelesai, + Tipe: jadwal.Tipe, + Link: jadwal.Link, + } + + dataJadwal = append(dataJadwal, data) + + } + if result.Error != nil { + return nil, err + } + return dataJadwal, nil +} + func (repo *PendaftaranSidSemRepo) GetPendaftaranSeminarById(id string) (output entity.SeminarPendaftaranSidSemRequest, err error) { var pendaftaransem models.PendaftaranSidSem var pendaftaranTA models.PendaftaranTA diff --git a/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go b/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go index c9c75dbeb1c6a4e481a828cbfd4ff8426db0b5c2..554c8cada41f114e316500bd09eeb39bec38228b 100644 --- a/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go +++ b/src/module/pendaftaran_sidsem/internal/usecase/pendaftaran_sidsem.go @@ -19,6 +19,7 @@ type PendaftaranSidSemUsecase interface { EditLulus(input entity.EditLulusRequest) (models.PendaftaranSidSem, error) EditDitolak(input entity.EditDitolakRequest) (models.PendaftaranSidSem, error) GetPlaceholders(idMahasiswa string) (entity.Placeholders, error) + GetPendaftaran(offset, size int) (output []entity.PendaftaranSidSemRequest, err error) } type PendaftaranSidSemUc struct { @@ -61,6 +62,10 @@ func (uc *PendaftaranSidSemUc) GetPendaftaranByPeriode(idPeriode string, offset, return uc.pendaftaransidsemrepo.GetPendaftaranByPeriode(idPeriode, offset, size) } +func (uc *PendaftaranSidSemUc) GetPendaftaran(offset, size int) (output []entity.PendaftaranSidSemRequest, err error) { + return uc.pendaftaransidsemrepo.GetPendaftaran(offset, size) +} + func (uc *PendaftaranSidSemUc) GetPendaftaranSidangById(id string) (entity.SidangPendaftaranSidSemRequest, error) { return uc.pendaftaransidsemrepo.GetPendaftaranSidangById(id) } diff --git a/src/module/pendaftaran_sidsem/internal/usecase/repository.go b/src/module/pendaftaran_sidsem/internal/usecase/repository.go index 95fb5e1d33096e49d57a76d44cc6293e439e6d63..363d4c8283b74d088f79b08e902eba153cbecbb5 100644 --- a/src/module/pendaftaran_sidsem/internal/usecase/repository.go +++ b/src/module/pendaftaran_sidsem/internal/usecase/repository.go @@ -20,4 +20,5 @@ type PendaftaranSidSemRepository interface { GetNameUntilTopikPlaceholders(idMahasiswa string) (entity.NameTopik, error) GetDosbingNamePlaceholder(idMahasiswa string) (entity.DosbingName, error) GetPendaftaranTaIdByMahasiswa(idMahasiswa string) (string, error) + GetPendaftaran(offset, size int) (output []entity.PendaftaranSidSemRequest, err error) } diff --git a/src/module/pendaftaran_sidsem/transport/admin_handler.go b/src/module/pendaftaran_sidsem/transport/admin_handler.go index ead65b8b597f09f2096fd6cf6e18948111219cd9..4e8c9067e936177d694d4c4b3b24e9aa71021b1f 100644 --- a/src/module/pendaftaran_sidsem/transport/admin_handler.go +++ b/src/module/pendaftaran_sidsem/transport/admin_handler.go @@ -27,7 +27,7 @@ func NewAdminJadwalSeminarHandler(cfg config.PendaftaranSidSemTransportConfig) * } func (t *AdminPendaftaranSidSemHandler) MountAdmin(group *echo.Group) { - group.GET("/pendaftaran-sidsem", t.GetPendaftaranByPeriode) + group.GET("/pendaftaran-sidsem-periode", t.GetPendaftaranByPeriode) group.DELETE("/pendaftaran-sidsem", t.DeletePendaftaran) group.GET("/pendaftaran-sidang", t.GetPendaftaranSidangById) group.GET("/pendaftaran-seminar", t.GetPendaftaranSeminarById) diff --git a/src/module/pendaftaran_sidsem/transport/timta_handler.go b/src/module/pendaftaran_sidsem/transport/timta_handler.go new file mode 100644 index 0000000000000000000000000000000000000000..ce08ff7db6bf12b756ea668eb5df8ea128d56bf5 --- /dev/null +++ b/src/module/pendaftaran_sidsem/transport/timta_handler.go @@ -0,0 +1,51 @@ +package transport + +import ( + "net/http" + "strconv" + + "github.com/labstack/echo/v4" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran_sidsem/config" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran_sidsem/internal/repository" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/pendaftaran_sidsem/internal/usecase" + "gitlab.informatika.org/k-01-11/graduit-be/src/utils" +) + +type TIMTAPendaftaranSidSemHandler struct { + pendaftaransidsemUsecase usecase.PendaftaranSidSemUsecase +} + +func NewTIMTAPendaftaranSidSemHandler(cfg config.PendaftaranSidSemTransportConfig) *TIMTAPendaftaranSidSemHandler { + pendaftaransidsemRepository := repository.NewPendaftaranSidSemRepository(cfg.DBWrite, cfg.DBRead) + pendaftaransidsemUsecase := usecase.NewPendaftaranSidSemUseCase(pendaftaransidsemRepository) + + return &TIMTAPendaftaranSidSemHandler{ + pendaftaransidsemUsecase: pendaftaransidsemUsecase, + } + +} + +func (t *TIMTAPendaftaranSidSemHandler) MountTIMTA(group *echo.Group) { + group.GET("/pendaftaran-sidsem", t.GetPendaftaran) +} + +func (t *TIMTAPendaftaranSidSemHandler) GetPendaftaran(c echo.Context) error { + sizeStr := c.QueryParam("limit") + offsetStr := c.QueryParam("offset") + + size, err := strconv.Atoi(sizeStr) + if err != nil { + size = 10 + } + offset, err := strconv.Atoi(offsetStr) + if err != nil { + offset = 0 + } + jadwal, err := t.pendaftaransidsemUsecase.GetPendaftaran(size, offset) + 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", jadwal)) +} + diff --git a/src/utils/helper.go b/src/utils/helper.go index 0ae531c46878955dcef292d40b33eda556c50401..9ff781904c495e409efcd9a58cb18ec8e7e5a909 100644 --- a/src/utils/helper.go +++ b/src/utils/helper.go @@ -18,13 +18,22 @@ type ResponseDetail struct { } type PageLimitSearchID struct { - Page int - Limit int - Search string - ID string + Page int + Limit int + Search string + ID string Periode string } +type Payload struct { + ID string + Nama string + Email string + NIM string + Roles []string + Kontak string +} + func ResponseDetailOutput(success bool, code int, message string, data interface{}) ResponseDetail { res := ResponseDetail{ Success: success, @@ -107,4 +116,4 @@ func GetPageLimitSearchID(urlValues url.Values) (output PageLimitSearchID, err e } return *param, nil -} \ No newline at end of file +}