package handlers import ( "context" "service/internal/infrastructure/transport/grpc/mappers" "service/internal/master/role/permission" // Asumsi path ke proto-generated file permissionV1 "service/internal/infrastructure/transport/grpc/gen/permission/v1" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) // PermissionHandler mengimplementasikan gRPC service untuk role permission. type PermissionHandler struct { permissionV1.UnimplementedRolPermissionServiceServer service permission.Service } // NewPermissionHandler membuat instance baru dari PermissionHandler. func NewPermissionHandler(service permission.Service) *PermissionHandler { return &PermissionHandler{ service: service, } } // GetRolePermissionTree adalah implementasi dari RPC. func (h *PermissionHandler) GetRolePermissionTree(ctx context.Context, req *permissionV1.GetRolePermissionTreeRequest) (*permissionV1.RolePermissionTreeResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "request cannot be nil") } // Konversi wrapper BoolValue ke pointer *bool yang diharapkan oleh service var activeOnly *bool if val := req.GetActiveOnly(); val != nil { b := val.GetValue() activeOnly = &b } tree, err := h.service.GetRolePermissionTree(ctx, req.GetRoleKeycloak(), req.GetGroupKeycloak(), activeOnly) if err != nil { return nil, handleServiceError(err) } // Menggunakan mapper untuk mengubah hasil dari service ke format proto protoResponse := mappers.MapRolePermissionTreeToProto(tree) return protoResponse, nil }