From 170d284d082f4346b5a7faf53202b7e8bcc219b8 Mon Sep 17 00:00:00 2001 From: Habib Fatkhul Rohman Date: Wed, 29 Oct 2025 15:10:21 +0700 Subject: [PATCH] fix(menu): Update ParentID handling in MenuUpdateRequest and improve Update method for better clarity --- modules/menu/dto/menu_dto.go | 2 +- modules/menu/repository/menu_repository.go | 7 +++++-- modules/menu/service/menu_service.go | 13 +++---------- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/modules/menu/dto/menu_dto.go b/modules/menu/dto/menu_dto.go index 5aad5e6..97a2673 100644 --- a/modules/menu/dto/menu_dto.go +++ b/modules/menu/dto/menu_dto.go @@ -92,6 +92,6 @@ type ( Status string `json:"status" form:"status" binding:"omitempty"` Mode string `json:"mode" form:"mode" binding:"omitempty,min=1,max=20"` Sequence int `json:"sequence" form:"sequence" binding:"omitempty"` - ParentID *uuid.UUID `json:"parent_id" form:"parent_id" binding:"omitempty,uuid4"` + ParentID *uuid.UUID `json:"parent_id" form:"parent_id" binding:"omitempty"` } ) diff --git a/modules/menu/repository/menu_repository.go b/modules/menu/repository/menu_repository.go index 810f876..1ed8ce6 100644 --- a/modules/menu/repository/menu_repository.go +++ b/modules/menu/repository/menu_repository.go @@ -85,8 +85,11 @@ func (m *menuRepository) Update(ctx context.Context, tx *gorm.DB, menu entities. if tx == nil { tx = m.db } - - if err := tx.WithContext(ctx).Updates(&menu).Error; err != nil { + + if err := tx.WithContext(ctx).Model(&entities.M_Menu{}). + Where("id = ?", menu.ID). + Select("*"). + Updates(&menu).Error; err != nil { return entities.M_Menu{}, err } diff --git a/modules/menu/service/menu_service.go b/modules/menu/service/menu_service.go index a7995c0..ae9ee92 100644 --- a/modules/menu/service/menu_service.go +++ b/modules/menu/service/menu_service.go @@ -10,7 +10,6 @@ import ( "github.com/Caknoooo/go-gin-clean-starter/modules/menu/repository" staticDto "github.com/Caknoooo/go-gin-clean-starter/pkg/dto" "github.com/google/uuid" - "gorm.io/gorm" ) @@ -167,15 +166,12 @@ func (m *menuService) GetByName(ctx context.Context, name string) (dto.MenuRespo // Update implements MenuService. func (m *menuService) Update(ctx context.Context, menuId string, menu dto.MenuUpdateRequest) (dto.MenuResponse, error) { - // ensure exists existing, err := m.menuRepository.GetById(ctx, m.db, menuId) if err != nil { return dto.MenuResponse{}, dto.ErrMenuNotFound } - // Only update fields if provided (not empty) if menu.Name != "" { - // Check for duplicate name menuByName, err := m.menuRepository.GetByName(ctx, m.db, menu.Name) if err == nil && menuByName.ID != existing.ID { return dto.MenuResponse{}, errors.New("menu name already exists") @@ -197,13 +193,10 @@ func (m *menuService) Update(ctx context.Context, menuId string, menu dto.MenuUp if menu.Sequence != 0 { existing.Sequence = menu.Sequence } - if menu.ParentID != nil && menu.ParentID.String() != "" { - pid, err := uuid.Parse(menu.ParentID.String()) - if err != nil { - return dto.MenuResponse{}, err - } + if menu.ParentID != nil { + pid := *menu.ParentID existing.ParentID = &pid - } else if menu.ParentID != nil && menu.ParentID.String() == "" { + } else { existing.ParentID = nil }