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
+}