55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package role
|
|
|
|
import (
|
|
"context"
|
|
"service/pkg/errors"
|
|
)
|
|
|
|
// RoleAccessService defines the contract for role access operations
|
|
type RoleAccessService interface {
|
|
GetRoleAccess(ctx context.Context, userID string) (*RoleAccessResponse, error)
|
|
}
|
|
|
|
// roleAccessService implements RoleAccessService
|
|
type roleAccessService struct {
|
|
repo RoleAccessRepository
|
|
}
|
|
|
|
// NewRoleAccessService creates a new instance of RoleAccessService
|
|
func NewRoleAccessService(repo RoleAccessRepository) RoleAccessService {
|
|
return &roleAccessService{
|
|
repo: repo,
|
|
}
|
|
}
|
|
|
|
// GetRoleAccess retrieves role access information for a user
|
|
func (s *roleAccessService) GetRoleAccess(ctx context.Context, userID string) (*RoleAccessResponse, error) {
|
|
if userID == "" {
|
|
return nil, errors.NewValidationError().Message("User ID is required").Metadata("userID", userID).Build()
|
|
}
|
|
|
|
// Get role access data from repository
|
|
roleAccessData, err := s.repo.GetRoleAccess(ctx, userID)
|
|
if err != nil {
|
|
return nil, errors.InternalError().Message("Failed to retrieve role access data").Cause(err).Build()
|
|
}
|
|
|
|
// Map the data to response format
|
|
response := MapPermissionToRoleAccessResponse(
|
|
roleAccessData.Roles,
|
|
roleAccessData.Permissions,
|
|
roleAccessData.Pages,
|
|
)
|
|
|
|
return response, nil
|
|
}
|
|
|
|
// GetUserRoles retrieves roles for a specific user
|
|
func (s *roleAccessService) GetUserRoles(ctx context.Context, userID string) ([]string, error) {
|
|
if userID == "" {
|
|
return nil, errors.NewValidationError().Message("User ID is required").Metadata("userID", userID).Build()
|
|
}
|
|
|
|
return s.repo.GetUserRoles(ctx, userID)
|
|
}
|