Files
satusehat-worker/internal/infrastructure/transport/grpc/handlers/permission_handler.go
T
2026-04-14 01:21:54 +00:00

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
}