From d4e270f5657e8c75f060aeab4e6b681096f4adde Mon Sep 17 00:00:00 2001 From: arieljovananda88 <jovanandaa@gmail.com> Date: Mon, 4 Mar 2024 16:59:44 +0700 Subject: [PATCH] feat: fetch and create for bimbingan logs --- src/database/Database.go | 1 + src/handler/handler.go | 14 ++++- src/handler/server.go | 3 +- src/models/BimbinganLogs.go | 14 +++++ src/module/bimbingan_log/config/common.go | 8 +++ .../bimbingan_log/entity/bimbingan_log.go | 21 +++++++ .../internal/repository/bimbingan_log.go | 41 ++++++++++++ .../internal/usecase/bimbingan_log.go | 36 +++++++++++ .../internal/usecase/repository.go | 8 +++ .../bimbingan_log/transport/admin_handler.go | 62 +++++++++++++++++++ .../system-log/internal/parser/parser.go | 35 ----------- .../config/common.go | 0 .../entity/system_log.go | 0 .../internal/repository/system_log.go | 2 +- .../internal/usecase/repository.go | 2 +- .../internal/usecase/system_log.go | 9 +-- .../transport/admin_handler.go | 15 +++-- .../transport/internal_handler.go | 8 +-- src/utils/Message.go | 17 ----- src/utils/helper.go | 37 +++++++++++ 20 files changed, 259 insertions(+), 74 deletions(-) create mode 100644 src/models/BimbinganLogs.go create mode 100644 src/module/bimbingan_log/config/common.go create mode 100644 src/module/bimbingan_log/entity/bimbingan_log.go create mode 100644 src/module/bimbingan_log/internal/repository/bimbingan_log.go create mode 100644 src/module/bimbingan_log/internal/usecase/bimbingan_log.go create mode 100644 src/module/bimbingan_log/internal/usecase/repository.go create mode 100644 src/module/bimbingan_log/transport/admin_handler.go delete mode 100644 src/module/system-log/internal/parser/parser.go rename src/module/{system-log => system_log}/config/common.go (100%) rename src/module/{system-log => system_log}/entity/system_log.go (100%) rename src/module/{system-log => system_log}/internal/repository/system_log.go (93%) rename src/module/{system-log => system_log}/internal/usecase/repository.go (94%) rename src/module/{system-log => system_log}/internal/usecase/system_log.go (62%) rename src/module/{system-log => system_log}/transport/admin_handler.go (64%) rename src/module/{system-log => system_log}/transport/internal_handler.go (84%) delete mode 100644 src/utils/Message.go diff --git a/src/database/Database.go b/src/database/Database.go index b939d93..bd052a4 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 2b536b0..ea48b63 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 1547514..95f7c46 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 0000000..c16e85b --- /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 0000000..10b5bbb --- /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 0000000..c175cf2 --- /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 0000000..7a43b1e --- /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 0000000..936cc2b --- /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 0000000..1a60786 --- /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 0000000..8465752 --- /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 596aeb3..0000000 --- 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 c3120bf..731ed01 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 c6aae9c..f49eb32 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 e2d93ed..bb224ed 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 46b1880..1dfcae9 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 13a6b89..9bd56d7 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 60860a2..0000000 --- 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 235512e..74fa2d8 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 +} -- GitLab