diff --git a/src/database/Database.go b/src/database/Database.go index b939d93c9712570ff5b5cba2483af73eaf2e667d..bd052a4730e26837b2ddb307a1b9b4858ab97c02 100644 --- a/src/database/Database.go +++ b/src/database/Database.go @@ -31,6 +31,7 @@ func initialize() { dbInstance.AutoMigrate(&models.Users{}) dbInstance.AutoMigrate(&models.SystemLogs{}) + dbInstance.AutoMigrate(&models.BimbinganLogs{}) } func GetInstance() *gorm.DB { diff --git a/src/handler/handler.go b/src/handler/handler.go index 2b536b0419d5079e4666e5ff4000ead9abd23187..ea48b63152f8ae74dd3b5494dafba3eb58540293 100644 --- a/src/handler/handler.go +++ b/src/handler/handler.go @@ -2,13 +2,16 @@ package handler import ( "gitlab.informatika.org/k-01-11/graduit-be/src/database" - systemLogConfig "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/config" - systemLogTransport "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/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" + systemLogConfig "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/config" + systemLogTransport "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/transport" ) type Service struct { InternalSystemLogHandler *systemLogTransport.InternalSystemLogHandler AdminSytemLogHandler *systemLogTransport.AdminSystemLogHandler + AdminBimbinganLogHandler *bimbinganLogTransport.AdminBimbinganLogHandler } func MakeHandler() *Service { @@ -20,7 +23,11 @@ func MakeHandler() *Service { DBWrite: dbWrite, DBRead: dbRead, }) - AdminSystemLogHandler := systemLogTransport.NewAdminSystemLogHandlerr(systemLogConfig.SystemLogTransportConfig{ + AdminSystemLogHandler := systemLogTransport.NewAdminSystemLogHandler(systemLogConfig.SystemLogTransportConfig{ + DBWrite: dbWrite, + DBRead: dbRead, + }) + AdminBimbinganLogHandler := bimbinganLogTransport.NewAdminBimginganLogHandler(bimbinganLogConfig.BimbinganLogTransportConfig{ DBWrite: dbWrite, DBRead: dbRead, }) @@ -28,5 +35,6 @@ func MakeHandler() *Service { return &Service{ InternalSystemLogHandler: InternalSystemLogHandler, AdminSytemLogHandler: AdminSystemLogHandler, + AdminBimbinganLogHandler: AdminBimbinganLogHandler, } } diff --git a/src/handler/server.go b/src/handler/server.go index 154751474108214a78615a0ee9eaf2f0c05eb152..95f7c4662d04fa79770a04c41afd976de49f5e51 100644 --- a/src/handler/server.go +++ b/src/handler/server.go @@ -14,13 +14,14 @@ import ( func (s *Service) InitializeRoutes() *echo.Echo { e := echo.New() - //belum ada middleware internalGroup := e.Group("api/internal") internalGroup.Use(middleware.BasicAuth()) s.InternalSystemLogHandler.MountInternal(internalGroup) + //belum ada middleware adminGroup := e.Group("api/admin") s.AdminSytemLogHandler.MountAdmin(adminGroup) + s.AdminBimbinganLogHandler.MountAdmin(adminGroup) return e } diff --git a/src/models/BimbinganLogs.go b/src/models/BimbinganLogs.go new file mode 100644 index 0000000000000000000000000000000000000000..c16e85b7581ed876a2458baafd25b0b66cdc3526 --- /dev/null +++ b/src/models/BimbinganLogs.go @@ -0,0 +1,14 @@ +package models + +import "time" + +type BimbinganLogs struct { + ID string `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"` + IDMahasiswa string `gorm:"column:id_mahasiswa" json:"id_mahasiswa"` + Date string `gorm:"column:date" json:"date"` + NamaDosen string `gorm:"column:nama_dosen" json:"nama_dosen"` + LaporanKemajuan string `gorm:"column:laporan_kemajuan" json:"laporan_kemajuan"` + Todo string `gorm:"column:todo" json:"todo"` + NextBimbingan string `gorm:"column:next_bimbingan" json:"next_bimbingan"` + CreatedAt time.Time `gorm:"column:created_at" json:"created_at"` +} diff --git a/src/module/bimbingan_log/config/common.go b/src/module/bimbingan_log/config/common.go new file mode 100644 index 0000000000000000000000000000000000000000..10b5bbba9f1a8394c8050f50dfe43026e0428f28 --- /dev/null +++ b/src/module/bimbingan_log/config/common.go @@ -0,0 +1,8 @@ +package config + +import "gorm.io/gorm" + +type BimbinganLogTransportConfig struct { + DBWrite *gorm.DB + DBRead *gorm.DB +} diff --git a/src/module/bimbingan_log/entity/bimbingan_log.go b/src/module/bimbingan_log/entity/bimbingan_log.go new file mode 100644 index 0000000000000000000000000000000000000000..c175cf29bd59caa063e36101855815d303cfe36f --- /dev/null +++ b/src/module/bimbingan_log/entity/bimbingan_log.go @@ -0,0 +1,21 @@ +package entity + +import ( + "time" +) + +type BimbinganLog struct { + ID string `json:"id"` + IDMahasiswa string `gorm:"column:id_mahasiswa" json:"id_mahasiswa"` + Date string `json:"date"` + NamaDosen string `json:"nama_dosen"` + LaporanKemajuan string `json:"laporan_kemajuan"` + Todo string `json:"todo"` + NextBimbingan string `json:"next_bimbingan"` + CreatedAt time.Time `json:"created_at"` +} + +type ParamValues struct { + Limit int + Offset int +} diff --git a/src/module/bimbingan_log/internal/repository/bimbingan_log.go b/src/module/bimbingan_log/internal/repository/bimbingan_log.go new file mode 100644 index 0000000000000000000000000000000000000000..7a43b1eb05a890a6c12e4d2f3398d3d2baf5a659 --- /dev/null +++ b/src/module/bimbingan_log/internal/repository/bimbingan_log.go @@ -0,0 +1,41 @@ +package repository + +import ( + "time" + + "github.com/google/uuid" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/bimbingan_log/entity" + "gorm.io/gorm" +) + +type BimbinganLogRepo struct { + DBWrite *gorm.DB + DBRead *gorm.DB +} + +func NewBimbinganLogRepository(dbWrite *gorm.DB, dbRead *gorm.DB) *BimbinganLogRepo { + return &BimbinganLogRepo{ + DBWrite: dbWrite, + DBRead: dbRead, + } +} + +func (repo *BimbinganLogRepo) NewBimbinganLog(bimbinganLog entity.BimbinganLog) (output entity.BimbinganLog, err error) { + bimbinganLog.ID = uuid.New().String() + + bimbinganLog.CreatedAt = time.Now() + result := repo.DBWrite.Create(&bimbinganLog) + if result.Error != nil { + return entity.BimbinganLog{}, result.Error + } + return bimbinganLog, nil +} + +func (repo *BimbinganLogRepo) GetBimbinganLogByStudentId(limit int, offset int, idMahasiswa string) (output []entity.BimbinganLog, err error) { + var bimbinganLogs []entity.BimbinganLog + result := repo.DBRead.Where("id_mahasiswa = ?", idMahasiswa).Limit(limit).Offset(offset).Find(&bimbinganLogs) + if result.Error != nil { + return nil, err + } + return bimbinganLogs, nil +} diff --git a/src/module/bimbingan_log/internal/usecase/bimbingan_log.go b/src/module/bimbingan_log/internal/usecase/bimbingan_log.go new file mode 100644 index 0000000000000000000000000000000000000000..936cc2bd2ecb3c2c2eb9bac702c76a8347db665f --- /dev/null +++ b/src/module/bimbingan_log/internal/usecase/bimbingan_log.go @@ -0,0 +1,36 @@ +package usecase + +import ( + "gitlab.informatika.org/k-01-11/graduit-be/src/module/bimbingan_log/entity" + "gitlab.informatika.org/k-01-11/graduit-be/src/utils" +) + +type BimbinganLogUsecase interface { + AddBimbinganLog(bimbinganLog entity.BimbinganLog) (entity.BimbinganLog, error) + GetBimbinganLog(param utils.LimitOffset, idMahasiswa string) ([]entity.BimbinganLog, error) +} + +type BimbinganLogUc struct { + bimbinganLogRepo BimbinganLogRepository +} + +func NewBimbinganLogUseCase(bimbinganLogRepo BimbinganLogRepository) *BimbinganLogUc { + return &BimbinganLogUc{ + bimbinganLogRepo: bimbinganLogRepo, + } +} + +func (uc *BimbinganLogUc) AddBimbinganLog(bimbinganLog entity.BimbinganLog) (entity.BimbinganLog, error) { + newBimbinganLog, err := uc.bimbinganLogRepo.NewBimbinganLog(bimbinganLog) + + if err != nil { + return newBimbinganLog, err + } + + return newBimbinganLog, nil + +} + +func (uc *BimbinganLogUc) GetBimbinganLog(param utils.LimitOffset, idMahasiswa string) ([]entity.BimbinganLog, error) { + return uc.bimbinganLogRepo.GetBimbinganLogByStudentId(param.Limit, param.Offset, idMahasiswa) +} diff --git a/src/module/bimbingan_log/internal/usecase/repository.go b/src/module/bimbingan_log/internal/usecase/repository.go new file mode 100644 index 0000000000000000000000000000000000000000..1a6078697e8653ec4371aa40281e8f1ef5848bd3 --- /dev/null +++ b/src/module/bimbingan_log/internal/usecase/repository.go @@ -0,0 +1,8 @@ +package usecase + +import "gitlab.informatika.org/k-01-11/graduit-be/src/module/bimbingan_log/entity" + +type BimbinganLogRepository interface { + NewBimbinganLog(bimbinganLog entity.BimbinganLog) (output entity.BimbinganLog, err error) + GetBimbinganLogByStudentId(limit int, offset int, idMahasiswa string) (output []entity.BimbinganLog, err error) +} diff --git a/src/module/bimbingan_log/transport/admin_handler.go b/src/module/bimbingan_log/transport/admin_handler.go new file mode 100644 index 0000000000000000000000000000000000000000..8465752a63c14c55206889be1f7f57bee82f1d3e --- /dev/null +++ b/src/module/bimbingan_log/transport/admin_handler.go @@ -0,0 +1,62 @@ +package transport + +import ( + "fmt" + "net/http" + + "github.com/labstack/echo" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/bimbingan_log/config" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/bimbingan_log/entity" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/bimbingan_log/internal/repository" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/bimbingan_log/internal/usecase" + "gitlab.informatika.org/k-01-11/graduit-be/src/utils" +) + +type AdminBimbinganLogHandler struct { + bimbinganLogUsecase usecase.BimbinganLogUsecase +} + +func NewAdminBimginganLogHandler(cfg config.BimbinganLogTransportConfig) *AdminBimbinganLogHandler { + bimbinganLogRepository := repository.NewBimbinganLogRepository(cfg.DBWrite, cfg.DBRead) + bimbinganLogUsecase := usecase.NewBimbinganLogUseCase(bimbinganLogRepository) + + return &AdminBimbinganLogHandler{ + bimbinganLogUsecase: bimbinganLogUsecase, + } + +} + +func (t *AdminBimbinganLogHandler) MountAdmin(group *echo.Group) { + group.POST("/bimbingan-log", t.AddBimbinganLog) + group.GET("/bimbingan-logs", t.GetBimbinganLog) +} + +func (t *AdminBimbinganLogHandler) AddBimbinganLog(c echo.Context) error { + bimbinganLog := new(entity.BimbinganLog) + + if err := c.Bind(bimbinganLog); err != nil { + return c.JSON(http.StatusBadRequest, utils.ResponseDetailOutput(false, http.StatusBadRequest, err.Error(), nil)) + } + + fmt.Println(*bimbinganLog) + newBimbinganLog, err := t.bimbinganLogUsecase.AddBimbinganLog(*bimbinganLog) + if err != nil { + return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, err.Error(), nil)) + } + + return c.JSON(http.StatusOK, utils.ResponseDetailOutput(true, http.StatusCreated, "Bimbingan log added successfully", newBimbinganLog)) +} + +func (t *AdminBimbinganLogHandler) GetBimbinganLog(c echo.Context) error { + param, err := utils.GetLimitOffset(c.QueryParams()) + idMahasiswa := c.QueryParam("id_mahasiswa") + if err != nil { + return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, err.Error(), nil)) + } + listGroupLimit, err := t.bimbinganLogUsecase.GetBimbinganLog(param, idMahasiswa) + 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, "Bimbingan logs successfully retreived", listGroupLimit)) +} diff --git a/src/module/system-log/internal/parser/parser.go b/src/module/system-log/internal/parser/parser.go deleted file mode 100644 index 596aeb324114bf1cae4b5120e3accb7b41f03e4e..0000000000000000000000000000000000000000 --- a/src/module/system-log/internal/parser/parser.go +++ /dev/null @@ -1,35 +0,0 @@ -package parser - -import ( - "net/url" - "strconv" - - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/entity" -) - -func GetSystemLogQueryParam(urlValues url.Values) (output entity.ParamValues, err error) { - param := new(entity.ParamValues) - - offset := urlValues.Get("offset") - if offset != "" { - offsetInt, err := strconv.Atoi(offset) - if err != nil { - return entity.ParamValues{}, err - } - param.Offset = offsetInt - } else { - param.Offset = 0 - } - limit := urlValues.Get("limit") - if limit != "" { - limitInt, err := strconv.Atoi(limit) - if err != nil { - return entity.ParamValues{}, err - } - param.Limit = limitInt - } else { - param.Limit = 20 - } - - return *param, nil -} diff --git a/src/module/system-log/config/common.go b/src/module/system_log/config/common.go similarity index 100% rename from src/module/system-log/config/common.go rename to src/module/system_log/config/common.go diff --git a/src/module/system-log/entity/system_log.go b/src/module/system_log/entity/system_log.go similarity index 100% rename from src/module/system-log/entity/system_log.go rename to src/module/system_log/entity/system_log.go diff --git a/src/module/system-log/internal/repository/system_log.go b/src/module/system_log/internal/repository/system_log.go similarity index 93% rename from src/module/system-log/internal/repository/system_log.go rename to src/module/system_log/internal/repository/system_log.go index c3120bf203eff4d109a2dd3bffe92ec7700acdb0..731ed013b65d62e80363245d32e9b977f8f1aec5 100644 --- a/src/module/system-log/internal/repository/system_log.go +++ b/src/module/system_log/internal/repository/system_log.go @@ -4,7 +4,7 @@ import ( "time" "github.com/google/uuid" - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/entity" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/entity" "gorm.io/gorm" ) diff --git a/src/module/system-log/internal/usecase/repository.go b/src/module/system_log/internal/usecase/repository.go similarity index 94% rename from src/module/system-log/internal/usecase/repository.go rename to src/module/system_log/internal/usecase/repository.go index c6aae9cad0bbbc7a831607decf0537d4b09eebe0..f49eb321d6459f1074e07e8c92467aee302d6bca 100644 --- a/src/module/system-log/internal/usecase/repository.go +++ b/src/module/system_log/internal/usecase/repository.go @@ -1,6 +1,6 @@ package usecase -import "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/entity" +import "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/entity" type SystemLogRepository interface { NewSystemLog(systemLog entity.SystemLog) (output entity.SystemLog, err error) diff --git a/src/module/system-log/internal/usecase/system_log.go b/src/module/system_log/internal/usecase/system_log.go similarity index 62% rename from src/module/system-log/internal/usecase/system_log.go rename to src/module/system_log/internal/usecase/system_log.go index e2d93ed44351ef3f20b4bf6f792e7327bd4007a8..bb224ed8e28ae509b66ecf5d309c6ba974b93703 100644 --- a/src/module/system-log/internal/usecase/system_log.go +++ b/src/module/system_log/internal/usecase/system_log.go @@ -1,12 +1,13 @@ package usecase import ( - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/entity" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/entity" + "gitlab.informatika.org/k-01-11/graduit-be/src/utils" ) type SystemLogUsecase interface { - AddSytemLog(groupLimit entity.SystemLog) (entity.SystemLog, error) - GetSystemLog(param entity.ParamValues) ([]entity.SystemLog, error) + AddSytemLog(systemLog entity.SystemLog) (entity.SystemLog, error) + GetSystemLog(param utils.LimitOffset) ([]entity.SystemLog, error) } type SystemLogUc struct { @@ -30,6 +31,6 @@ func (uc *SystemLogUc) AddSytemLog(systemLog entity.SystemLog) (entity.SystemLog } -func (uc *SystemLogUc) GetSystemLog(param entity.ParamValues) ([]entity.SystemLog, error) { +func (uc *SystemLogUc) GetSystemLog(param utils.LimitOffset) ([]entity.SystemLog, error) { return uc.systemLogRepo.GetSystemLog(param.Limit, param.Offset) } diff --git a/src/module/system-log/transport/admin_handler.go b/src/module/system_log/transport/admin_handler.go similarity index 64% rename from src/module/system-log/transport/admin_handler.go rename to src/module/system_log/transport/admin_handler.go index 46b1880d42a047a77ec42cb02c8ee7bea71433bb..1dfcae98dd299de3b13450db4e0d94032c86e947 100644 --- a/src/module/system-log/transport/admin_handler.go +++ b/src/module/system_log/transport/admin_handler.go @@ -4,10 +4,9 @@ import ( "net/http" "github.com/labstack/echo" - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/config" - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/internal/parser" - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/internal/repository" - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/internal/usecase" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/config" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/internal/repository" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/internal/usecase" "gitlab.informatika.org/k-01-11/graduit-be/src/utils" ) @@ -15,7 +14,7 @@ type AdminSystemLogHandler struct { systemLogUsecase usecase.SystemLogUsecase } -func NewAdminSystemLogHandlerr(cfg config.SystemLogTransportConfig) *AdminSystemLogHandler { +func NewAdminSystemLogHandler(cfg config.SystemLogTransportConfig) *AdminSystemLogHandler { systemLogRepository := repository.NewSystemLogRepository(cfg.DBWrite, cfg.DBRead) systemLogUsecase := usecase.NewSystemLogUseCase(systemLogRepository) @@ -29,13 +28,13 @@ func (t *AdminSystemLogHandler) MountAdmin(group *echo.Group) { group.GET("/system-logs", t.GetSystemLog) } -func (r *AdminSystemLogHandler) GetSystemLog(c echo.Context) error { - param, err := parser.GetSystemLogQueryParam(c.QueryParams()) +func (t *AdminSystemLogHandler) GetSystemLog(c echo.Context) error { + param, err := utils.GetLimitOffset(c.QueryParams()) if err != nil { return c.JSON(http.StatusInternalServerError, utils.ResponseDetailOutput(false, http.StatusInternalServerError, err.Error(), nil)) } - listGroupLimit, err := r.systemLogUsecase.GetSystemLog(param) + listGroupLimit, err := t.systemLogUsecase.GetSystemLog(param) if err != nil { return c.JSON(http.StatusBadRequest, utils.ResponseDetailOutput(false, http.StatusBadRequest, err.Error(), nil)) } diff --git a/src/module/system-log/transport/internal_handler.go b/src/module/system_log/transport/internal_handler.go similarity index 84% rename from src/module/system-log/transport/internal_handler.go rename to src/module/system_log/transport/internal_handler.go index 13a6b89c8976aff88b9bade58a67b1e9cfd4b215..9bd56d7d1725be79ee210a86b1d3a07806d8603e 100644 --- a/src/module/system-log/transport/internal_handler.go +++ b/src/module/system_log/transport/internal_handler.go @@ -4,10 +4,10 @@ import ( "net/http" "github.com/labstack/echo" - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/config" - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/entity" - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/internal/repository" - "gitlab.informatika.org/k-01-11/graduit-be/src/module/system-log/internal/usecase" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/config" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/entity" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/internal/repository" + "gitlab.informatika.org/k-01-11/graduit-be/src/module/system_log/internal/usecase" "gitlab.informatika.org/k-01-11/graduit-be/src/utils" ) diff --git a/src/utils/Message.go b/src/utils/Message.go deleted file mode 100644 index 60860a2b6483052e28fa428e49f2a6004cb622f5..0000000000000000000000000000000000000000 --- a/src/utils/Message.go +++ /dev/null @@ -1,17 +0,0 @@ -package utils - -import ( - "github.com/gin-gonic/gin" -) - -type ResponseMessage struct { - Message string `json:"message"` -} - -func SendResponseMessage(c *gin.Context, msg string, status int) { - message := ResponseMessage{ - Message: msg, - } - - c.JSON(status, message) -} diff --git a/src/utils/helper.go b/src/utils/helper.go index 235512ec1e284fb780267e2db36fff97638649b6..74fa2d891fe487d898764f1b2238e7b9ffeecf85 100644 --- a/src/utils/helper.go +++ b/src/utils/helper.go @@ -1,5 +1,15 @@ package utils +import ( + "net/url" + "strconv" +) + +type LimitOffset struct { + Limit int + Offset int +} + type ResponseDetail struct { Success bool `json:"success"` Code int `json:"code"` @@ -16,3 +26,30 @@ func ResponseDetailOutput(success bool, code int, message string, data interface } return res } + +func GetLimitOffset(urlValues url.Values) (output LimitOffset, err error) { + param := new(LimitOffset) + + offset := urlValues.Get("offset") + if offset != "" { + offsetInt, err := strconv.Atoi(offset) + if err != nil { + return LimitOffset{}, err + } + param.Offset = offsetInt + } else { + param.Offset = 0 + } + limit := urlValues.Get("limit") + if limit != "" { + limitInt, err := strconv.Atoi(limit) + if err != nil { + return LimitOffset{}, err + } + param.Limit = limitInt + } else { + param.Limit = 20 + } + + return *param, nil +}