wms-be/modules/menu/repository/menu_repository.go

123 lines
2.9 KiB
Go

package repository
import (
"context"
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"gorm.io/gorm"
)
type (
MenuRepository interface {
Create(ctx context.Context, tx *gorm.DB, menu entities.M_Menu) (entities.M_Menu, error)
GetById(ctx context.Context, tx *gorm.DB, menuId string) (entities.M_Menu, error)
GetByName(ctx context.Context, tx *gorm.DB, name string) (entities.M_Menu, error)
Update(ctx context.Context, tx *gorm.DB, menu entities.M_Menu) (entities.M_Menu, error)
Delete(ctx context.Context, tx *gorm.DB, menuId string) error
GetAll(ctx context.Context, tx *gorm.DB) ([]entities.M_Menu, error)
}
menuRepository struct {
db *gorm.DB
}
)
// GetAll implements MenuRepository.
func (m *menuRepository) GetAll(ctx context.Context, tx *gorm.DB) ([]entities.M_Menu, error) {
if tx == nil {
tx = m.db
}
var menus []entities.M_Menu
err := tx.WithContext(ctx).
Preload("Parent").
Preload("Permissions").
Find(&menus).Error
if err != nil {
return nil, err
}
return menus, nil
}
// Create implements MenuRepository.
func (m *menuRepository) Create(ctx context.Context, tx *gorm.DB, menu entities.M_Menu) (entities.M_Menu, error) {
if tx == nil {
tx = m.db
}
if err := tx.WithContext(ctx).Create(&menu).Error; err != nil {
return entities.M_Menu{}, err
}
return menu, nil
}
// Delete implements MenuRepository.
func (m *menuRepository) Delete(ctx context.Context, tx *gorm.DB, menuId string) error {
if tx == nil {
tx = m.db
}
// Use a parameterized WHERE clause to ensure the ID is passed as a bound parameter
if err := tx.WithContext(ctx).Where("id = ?", menuId).Delete(&entities.M_Menu{}).Error; err != nil {
return err
}
return nil
}
// GetById implements MenuRepository.
func (m *menuRepository) GetById(ctx context.Context, tx *gorm.DB, menuId string) (entities.M_Menu, error) {
if tx == nil {
tx = m.db
}
var menu entities.M_Menu
// preload Parent relation jika entitas M_Menu punya association Parent
if err := tx.WithContext(ctx).
Preload("Parent").
Preload("Permissions").
First(&menu, "id = ?", menuId).Error; err != nil {
return entities.M_Menu{}, err
}
return menu, nil
}
// GetByName implements MenuRepository.
func (m *menuRepository) GetByName(ctx context.Context, tx *gorm.DB, name string) (entities.M_Menu, error) {
if tx == nil {
tx = m.db
}
var menu entities.M_Menu
if err := tx.WithContext(ctx).Where("name = ?", name).First(&menu).Error; err != nil {
return entities.M_Menu{}, err
}
return menu, nil
}
// Update implements MenuRepository.
func (m *menuRepository) Update(ctx context.Context, tx *gorm.DB, menu entities.M_Menu) (entities.M_Menu, error) {
if tx == nil {
tx = m.db
}
if err := tx.WithContext(ctx).Model(&entities.M_Menu{}).
Where("id = ?", menu.ID).
Select("*").
Updates(&menu).Error; err != nil {
return entities.M_Menu{}, err
}
return menu, nil
}
func NewMenuRepository(db *gorm.DB) MenuRepository {
return &menuRepository{
db: db,
}
}