Files
satusehat-service/internal/infrastructure/transport/grpc/mappers/permission_mapper.go
T
2026-04-14 01:23:34 +00:00

56 lines
1.6 KiB
Go

package mappers
import (
permissionV1 "service/internal/infrastructure/transport/grpc/gen/permission/v1"
"service/internal/master/role/permission"
)
// mapAccessTreeToProto secara rekursif mengubah tree dari service ke format proto.
func mapAccessTreeToProto(serviceAccess []*permission.AccessTreeItem) []*permissionV1.AccessTreeItem {
if serviceAccess == nil {
return nil
}
protoAccess := make([]*permissionV1.AccessTreeItem, len(serviceAccess))
for i, item := range serviceAccess {
protoItem := &permissionV1.AccessTreeItem{
Id: item.ID,
Name: item.Name,
Icon: item.Icon,
Url: item.URL,
Level: int32(item.Level),
Sort: int32(item.Sort),
Active: item.Active,
Children: mapAccessTreeToProto(item.Children), // Panggilan rekursif
}
if item.Permission != nil {
protoItem.Permission = &permissionV1.Permission{
Create: item.Permission.Create,
Read: item.Permission.Read,
Update: item.Permission.Update,
Delete: item.Permission.Delete,
Disable: item.Permission.Disable,
}
}
protoAccess[i] = protoItem
}
return protoAccess
}
// MapRolePermissionTreeToProto adalah fungsi utama untuk mengubah seluruh respons tree.
func MapRolePermissionTreeToProto(serviceResponse *permission.RolePermissionTreeResponse) *permissionV1.RolePermissionTreeResponse {
if serviceResponse == nil {
return nil
}
return &permissionV1.RolePermissionTreeResponse{
Success: serviceResponse.Success,
Data: &permissionV1.RolePermissionData{
Role: serviceResponse.Data.Role,
// Group: serviceResponse.Data.Group,
Access: mapAccessTreeToProto(serviceResponse.Data.Access),
},
}
}