first commit
This commit is contained in:
No files matched your search
@@ -0,0 +1,32 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"service/pkg/errors"
|
||||
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
// / handleServiceError mengkonversi error dari service layer ke gRPC status error
|
||||
func handleServiceError(err error) error {
|
||||
appErr := errors.FromError(err)
|
||||
if appErr == nil {
|
||||
return status.Error(codes.Internal, "internal server error")
|
||||
}
|
||||
|
||||
// Mapping kategori error ke gRPC codes
|
||||
switch appErr.Category() {
|
||||
case errors.CategoryValidation:
|
||||
return status.Error(codes.InvalidArgument, appErr.Error())
|
||||
case errors.CategoryNotFound:
|
||||
return status.Error(codes.NotFound, appErr.Error())
|
||||
case errors.CategoryConflict:
|
||||
return status.Error(codes.AlreadyExists, appErr.Error())
|
||||
case errors.CategoryUnauthorized:
|
||||
return status.Error(codes.Unauthenticated, appErr.Error())
|
||||
case errors.CategoryForbidden:
|
||||
return status.Error(codes.PermissionDenied, appErr.Error())
|
||||
default:
|
||||
return status.Error(codes.Internal, appErr.Error())
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user