first commit
This commit is contained in:
No files matched your search
@@ -0,0 +1,89 @@
|
||||
package pages
|
||||
|
||||
// mapRequestToEntity converts RolPagesRequest to *RolPages entity
|
||||
func mapRequestToEntity(req RolPagesRequest) *RolPages {
|
||||
return &RolPages{
|
||||
Name: req.Name,
|
||||
Icon: req.Icon,
|
||||
URL: req.URL,
|
||||
Level: req.Level,
|
||||
Sort: req.Sort,
|
||||
Parent: req.Parent,
|
||||
Active: req.Active,
|
||||
}
|
||||
}
|
||||
|
||||
// mapEntityToResponse converts *RolPages entity to *RolPagesResponse DTO
|
||||
func mapEntityToResponse(e *RolPages) *RolPagesResponse {
|
||||
return &RolPagesResponse{
|
||||
Id: e.Id,
|
||||
Name: e.Name,
|
||||
Icon: e.Icon,
|
||||
URL: e.URL,
|
||||
Level: e.Level,
|
||||
Sort: e.Sort,
|
||||
Parent: e.Parent,
|
||||
Active: e.Active,
|
||||
}
|
||||
}
|
||||
|
||||
// mapEntityToTreeResponse converts *RolPages entity to *RolPagesTreeResponse DTO
|
||||
func mapEntityToTreeResponse(e *RolPages) *RolPagesTreeResponse {
|
||||
return &RolPagesTreeResponse{
|
||||
Id: e.Id,
|
||||
Name: e.Name,
|
||||
Icon: e.Icon,
|
||||
URL: e.URL,
|
||||
Level: e.Level,
|
||||
Sort: e.Sort,
|
||||
Active: e.Active,
|
||||
}
|
||||
}
|
||||
|
||||
// buildTreeHierarchy membangun struktur hirarki dari flat list
|
||||
func buildTreeHierarchy(pages []*RolPages) []*RolPagesTreeResponse {
|
||||
pageMap := make(map[int64]*RolPagesTreeResponse)
|
||||
var roots []*RolPagesTreeResponse
|
||||
|
||||
// Convert semua pages ke TreeResponse dan buat map
|
||||
for _, page := range pages {
|
||||
treeResponse := mapEntityToTreeResponse(page)
|
||||
pageMap[page.Id] = treeResponse
|
||||
}
|
||||
|
||||
// Bangun relasi parent-child
|
||||
for _, page := range pages {
|
||||
if page.Parent == nil {
|
||||
// Ini adalah root node
|
||||
roots = append(roots, pageMap[page.Id])
|
||||
} else {
|
||||
// Ini adalah child node
|
||||
if parent, exists := pageMap[*page.Parent]; exists {
|
||||
parent.Children = append(parent.Children, pageMap[page.Id])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sort children berdasarkan sort order
|
||||
for _, page := range pageMap {
|
||||
if len(page.Children) > 0 {
|
||||
sortChildren(page.Children)
|
||||
}
|
||||
}
|
||||
|
||||
// Sort root nodes berdasarkan sort order
|
||||
sortChildren(roots)
|
||||
|
||||
return roots
|
||||
}
|
||||
|
||||
// sortChildren mengurutkan children berdasarkan field Sort
|
||||
func sortChildren(children []*RolPagesTreeResponse) {
|
||||
for i := 0; i < len(children); i++ {
|
||||
for j := i + 1; j < len(children); j++ {
|
||||
if children[i].Sort > children[j].Sort {
|
||||
children[i], children[j] = children[j], children[i]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user