From 926f8dae0a60c52021a35ffa9ce186c6d370d515 Mon Sep 17 00:00:00 2001 From: "yusron.alamsyah2311" Date: Wed, 13 May 2026 10:54:46 +0700 Subject: [PATCH] fix : error nil pointer endpoint access menu --- internal/domain/access/response.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/internal/domain/access/response.go b/internal/domain/access/response.go index 0053cf4..f4dff3a 100644 --- a/internal/domain/access/response.go +++ b/internal/domain/access/response.go @@ -17,21 +17,33 @@ type AvailableMenuResponse struct { func MapMenuModelToResponse(pages []RolePageModel) []AvailableMenuResponse { pageMap := make(map[string]*AvailableMenuChildResponse) + childrenMap := make(map[string][]*AvailableMenuChildResponse) var result []AvailableMenuResponse + // First pass: create all menu items for _, p := range pages { pageMap[p.ID] = &AvailableMenuChildResponse{ Title: p.Name, Icon: p.Icon.String, To: p.Url.String, } + } + // Second pass: build parent-child relationships + for _, p := range pages { if p.ParentId.String != "" { - pageMap[p.ParentId.String].Children = append(pageMap[p.ParentId.String].Children, pageMap[p.ID]) + // Check if parent exists before adding child + if parent, exists := pageMap[p.ParentId.String]; exists { + parent.Children = append(parent.Children, pageMap[p.ID]) + } + } else { + // Track root items + childrenMap[p.ID] = pageMap[p.ID].Children } } + // Third pass: build result with root items only for _, p := range pages { if p.ParentId.String == "" { result = append(result, AvailableMenuResponse{