update ignore
This commit is contained in:
No files matched your search
@@ -0,0 +1,95 @@
|
||||
package role
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
rolepPermission "service/internal/master/role/permission"
|
||||
)
|
||||
|
||||
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,
|
||||
}
|
||||
}
|
||||
|
||||
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,
|
||||
}
|
||||
}
|
||||
|
||||
// MapPermissionToRoleAccessResponse converts RolPermission to RoleAccessResponse structure
|
||||
func MapPermissionToRoleAccessResponse(roles []string, permissions []*rolepPermission.RolPermission, pages []*RolPages) *RoleAccessResponse {
|
||||
response := &RoleAccessResponse{
|
||||
Roles: roles,
|
||||
Access: []MenuItem{},
|
||||
}
|
||||
|
||||
// Map permissions to create menu items based on pages
|
||||
// Filter pages yang memiliki permission read = true
|
||||
accessiblePages := []*RolPages{}
|
||||
for i, permission := range permissions {
|
||||
if permission.Read && i < len(pages) {
|
||||
accessiblePages = append(accessiblePages, pages[i])
|
||||
}
|
||||
}
|
||||
|
||||
// Group pages by parent ID
|
||||
parentMap := make(map[int64][]*RolPages)
|
||||
var rootPages []*RolPages
|
||||
|
||||
for _, page := range accessiblePages {
|
||||
if page.Parent == nil {
|
||||
rootPages = append(rootPages, page)
|
||||
} else {
|
||||
parentMap[*page.Parent] = append(parentMap[*page.Parent], page)
|
||||
}
|
||||
}
|
||||
|
||||
// Build menu hierarchy
|
||||
for _, rootPage := range rootPages {
|
||||
menuItem := MenuItem{
|
||||
ID: generateUUID(),
|
||||
Name: rootPage.Name,
|
||||
Icon: rootPage.Icon,
|
||||
URL: rootPage.URL,
|
||||
Level: fmt.Sprintf("%d", rootPage.Level),
|
||||
}
|
||||
|
||||
// Add children if any
|
||||
if children, exists := parentMap[rootPage.Id]; exists {
|
||||
for _, child := range children {
|
||||
menuChild := MenuChild{
|
||||
Name: child.Name,
|
||||
Icon: child.Icon,
|
||||
URL: child.URL,
|
||||
Level: fmt.Sprintf("%d", child.Level),
|
||||
}
|
||||
menuItem.Children = append(menuItem.Children, menuChild)
|
||||
}
|
||||
}
|
||||
|
||||
response.Access = append(response.Access, menuItem)
|
||||
}
|
||||
|
||||
return response
|
||||
}
|
||||
|
||||
// Helper function to generate UUID (you may want to use a proper UUID library)
|
||||
func generateUUID() string {
|
||||
return fmt.Sprintf("%d", time.Now().UnixNano())
|
||||
}
|
||||
Reference in New Issue
Block a user