first commit

This commit is contained in:
meninjar
2026-04-14 01:23:34 +00:00
commit edfaa886ff
443 changed files with 1245931 additions and 0 deletions

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
}