feat: konfigurasi sistem toggle pemakaian pakan ovk negatif

This commit is contained in:
Adnan Zahir
2026-04-28 10:51:54 +07:00
parent 1d6e1fa5be
commit 6f6541d4c1
15 changed files with 347 additions and 1 deletions
@@ -0,0 +1,40 @@
package controller
import (
"github.com/gofiber/fiber/v2"
service "gitlab.com/mbugroup/lti-api.git/internal/modules/system-settings/services"
)
type SystemSettingController struct {
Service service.SystemSettingService
}
func NewSystemSettingController(svc service.SystemSettingService) *SystemSettingController {
return &SystemSettingController{Service: svc}
}
func (ctrl *SystemSettingController) GetAll(c *fiber.Ctx) error {
settings, err := ctrl.Service.GetAll(c.Context())
if err != nil {
return err
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{"data": settings})
}
type setAllowNegativePakanOVKRequest struct {
Value bool `json:"value"`
}
func (ctrl *SystemSettingController) SetAllowNegativePakanOVK(c *fiber.Ctx) error {
var req setAllowNegativePakanOVKRequest
if err := c.BodyParser(&req); err != nil {
return fiber.NewError(fiber.StatusBadRequest, "Request body tidak valid")
}
if err := ctrl.Service.SetAllowNegativePakanOVK(c.Context(), req.Value); err != nil {
return err
}
return c.Status(fiber.StatusOK).JSON(fiber.Map{
"message": "Setting berhasil diperbarui",
"value": req.Value,
})
}
@@ -0,0 +1,18 @@
package systemsettings
import (
"github.com/go-playground/validator/v10"
"github.com/gofiber/fiber/v2"
"gorm.io/gorm"
repository "gitlab.com/mbugroup/lti-api.git/internal/modules/system-settings/repositories"
service "gitlab.com/mbugroup/lti-api.git/internal/modules/system-settings/services"
)
type SystemSettingsModule struct{}
func (SystemSettingsModule) RegisterRoutes(router fiber.Router, db *gorm.DB, validate *validator.Validate) {
repo := repository.NewSystemSettingRepository(db)
svc := service.NewSystemSettingService(repo)
SystemSettingRoutes(router, svc)
}
@@ -0,0 +1,62 @@
package repository
import (
"context"
"errors"
"time"
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
"gorm.io/gorm"
)
type SystemSettingRepository interface {
Get(ctx context.Context, key string) (*entity.SystemSetting, error)
Set(ctx context.Context, key, value string) error
List(ctx context.Context) ([]entity.SystemSetting, error)
GetAllowNegativePakanOVK(ctx context.Context) (bool, error)
}
type systemSettingRepositoryImpl struct {
db *gorm.DB
}
func NewSystemSettingRepository(db *gorm.DB) SystemSettingRepository {
return &systemSettingRepositoryImpl{db: db}
}
func (r *systemSettingRepositoryImpl) Get(ctx context.Context, key string) (*entity.SystemSetting, error) {
var setting entity.SystemSetting
if err := r.db.WithContext(ctx).Where("key = ?", key).First(&setting).Error; err != nil {
return nil, err
}
return &setting, nil
}
func (r *systemSettingRepositoryImpl) Set(ctx context.Context, key, value string) error {
return r.db.WithContext(ctx).
Model(&entity.SystemSetting{}).
Where("key = ?", key).
Updates(map[string]interface{}{
"value": value,
"updated_at": time.Now(),
}).Error
}
func (r *systemSettingRepositoryImpl) List(ctx context.Context) ([]entity.SystemSetting, error) {
var settings []entity.SystemSetting
if err := r.db.WithContext(ctx).Order("key ASC").Find(&settings).Error; err != nil {
return nil, err
}
return settings, nil
}
func (r *systemSettingRepositoryImpl) GetAllowNegativePakanOVK(ctx context.Context) (bool, error) {
setting, err := r.Get(ctx, entity.SystemSettingKeyAllowNegativePakanOVK)
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return false, nil
}
return false, err
}
return setting.Value == "true", nil
}
+16
View File
@@ -0,0 +1,16 @@
package systemsettings
import (
"github.com/gofiber/fiber/v2"
controller "gitlab.com/mbugroup/lti-api.git/internal/modules/system-settings/controllers"
service "gitlab.com/mbugroup/lti-api.git/internal/modules/system-settings/services"
m "gitlab.com/mbugroup/lti-api.git/internal/middleware"
)
func SystemSettingRoutes(v1 fiber.Router, svc service.SystemSettingService) {
ctrl := controller.NewSystemSettingController(svc)
route := v1.Group("/system-settings")
route.Get("/", ctrl.GetAll)
route.Patch("/allow-negative-pakan-ovk", m.RequirePermissions(m.P_SystemSettingUpdate), ctrl.SetAllowNegativePakanOVK)
}
@@ -0,0 +1,46 @@
package service
import (
"context"
"github.com/gofiber/fiber/v2"
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
repository "gitlab.com/mbugroup/lti-api.git/internal/modules/system-settings/repositories"
)
type SystemSettingService interface {
GetAll(ctx context.Context) ([]entity.SystemSetting, error)
GetAllowNegativePakanOVK(ctx context.Context) (bool, error)
SetAllowNegativePakanOVK(ctx context.Context, allow bool) error
}
type systemSettingService struct {
Repository repository.SystemSettingRepository
}
func NewSystemSettingService(repo repository.SystemSettingRepository) SystemSettingService {
return &systemSettingService{Repository: repo}
}
func (s *systemSettingService) GetAll(ctx context.Context) ([]entity.SystemSetting, error) {
settings, err := s.Repository.List(ctx)
if err != nil {
return nil, fiber.NewError(fiber.StatusInternalServerError, "Gagal mengambil system settings")
}
return settings, nil
}
func (s *systemSettingService) GetAllowNegativePakanOVK(ctx context.Context) (bool, error) {
return s.Repository.GetAllowNegativePakanOVK(ctx)
}
func (s *systemSettingService) SetAllowNegativePakanOVK(ctx context.Context, allow bool) error {
value := "false"
if allow {
value = "true"
}
if err := s.Repository.Set(ctx, entity.SystemSettingKeyAllowNegativePakanOVK, value); err != nil {
return fiber.NewError(fiber.StatusInternalServerError, "Gagal mengubah setting allow_negative_pakan_ovk")
}
return nil
}