fix(menu): Update ParentID handling in MenuUpdateRequest and improve Update method for better clarity
Deploy Application / deploy (push) Successful in 8s Details

This commit is contained in:
Habib Fatkhul Rohman 2025-10-29 15:10:21 +07:00
parent fa9c1ba44f
commit 170d284d08
3 changed files with 9 additions and 13 deletions

View File

@ -92,6 +92,6 @@ type (
Status string `json:"status" form:"status" binding:"omitempty"` Status string `json:"status" form:"status" binding:"omitempty"`
Mode string `json:"mode" form:"mode" binding:"omitempty,min=1,max=20"` Mode string `json:"mode" form:"mode" binding:"omitempty,min=1,max=20"`
Sequence int `json:"sequence" form:"sequence" binding:"omitempty"` 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"`
} }
) )

View File

@ -86,7 +86,10 @@ func (m *menuRepository) Update(ctx context.Context, tx *gorm.DB, menu entities.
tx = m.db 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 return entities.M_Menu{}, err
} }

View File

@ -10,7 +10,6 @@ import (
"github.com/Caknoooo/go-gin-clean-starter/modules/menu/repository" "github.com/Caknoooo/go-gin-clean-starter/modules/menu/repository"
staticDto "github.com/Caknoooo/go-gin-clean-starter/pkg/dto" staticDto "github.com/Caknoooo/go-gin-clean-starter/pkg/dto"
"github.com/google/uuid" "github.com/google/uuid"
"gorm.io/gorm" "gorm.io/gorm"
) )
@ -167,15 +166,12 @@ func (m *menuService) GetByName(ctx context.Context, name string) (dto.MenuRespo
// Update implements MenuService. // Update implements MenuService.
func (m *menuService) Update(ctx context.Context, menuId string, menu dto.MenuUpdateRequest) (dto.MenuResponse, error) { 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) existing, err := m.menuRepository.GetById(ctx, m.db, menuId)
if err != nil { if err != nil {
return dto.MenuResponse{}, dto.ErrMenuNotFound return dto.MenuResponse{}, dto.ErrMenuNotFound
} }
// Only update fields if provided (not empty)
if menu.Name != "" { if menu.Name != "" {
// Check for duplicate name
menuByName, err := m.menuRepository.GetByName(ctx, m.db, menu.Name) menuByName, err := m.menuRepository.GetByName(ctx, m.db, menu.Name)
if err == nil && menuByName.ID != existing.ID { if err == nil && menuByName.ID != existing.ID {
return dto.MenuResponse{}, errors.New("menu name already exists") 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 { if menu.Sequence != 0 {
existing.Sequence = menu.Sequence existing.Sequence = menu.Sequence
} }
if menu.ParentID != nil && menu.ParentID.String() != "" { if menu.ParentID != nil {
pid, err := uuid.Parse(menu.ParentID.String()) pid := *menu.ParentID
if err != nil {
return dto.MenuResponse{}, err
}
existing.ParentID = &pid existing.ParentID = &pid
} else if menu.ParentID != nil && menu.ParentID.String() == "" { } else {
existing.ParentID = nil existing.ParentID = nil
} }