51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
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
|
|
}
|