diff --git a/modules/role/dto/role_dto.go b/modules/role/dto/role_dto.go index b0393e8..5866e5f 100644 --- a/modules/role/dto/role_dto.go +++ b/modules/role/dto/role_dto.go @@ -103,12 +103,12 @@ type RoleResponse struct { } type RoleMenuResponse struct { - ID string `json:"id"` - Name string `json:"name"` - IconUrl string `json:"icon_url"` - Url string `json:"url"` - Sequence int `json:"sequence"` - ParentID string `json:"parent_id,omitempty"` + ID string `json:"id"` + Name string `json:"name"` + IconUrl string `json:"icon_url"` + Url string `json:"url"` + Sequence int `json:"sequence"` + Parent *RoleMenuResponse `json:"parent,omitempty"` } type RolePermissionsResponse struct { diff --git a/modules/role/repository/role_repository.go b/modules/role/repository/role_repository.go index 6102945..0e70c11 100644 --- a/modules/role/repository/role_repository.go +++ b/modules/role/repository/role_repository.go @@ -210,6 +210,7 @@ func (r *roleRepository) GetRoleByID(ctx context.Context, tx *gorm.DB, id string Preload("Client"). Preload("Permissions"). Preload("Menus"). + Preload("Menus.Parent"). First(&role).Error; err != nil { return entities.M_Role{}, err } diff --git a/modules/role/service/role_service.go b/modules/role/service/role_service.go index 1609d34..91c4c8c 100644 --- a/modules/role/service/role_service.go +++ b/modules/role/service/role_service.go @@ -497,13 +497,24 @@ func ToRoleResponse(role entities.M_Role) dto.RoleResponse { var menus []dto.RoleMenuResponse for _, m := range role.Menus { + var parent *dto.RoleMenuResponse + if m.Parent != nil { + parent = &dto.RoleMenuResponse{ + ID: m.Parent.ID.String(), + Name: m.Parent.Name, + IconUrl: m.Parent.IconUrl, + Url: m.Parent.Url, + Sequence: m.Parent.Sequence, + Parent: nil, // atau rekursif jika ingin nested lebih dalam + } + } menus = append(menus, dto.RoleMenuResponse{ ID: m.ID.String(), Name: m.Name, IconUrl: m.IconUrl, Url: m.Url, Sequence: m.Sequence, - ParentID: m.ParentID.String(), + Parent: parent, }) }