diff --git a/internal/pushnotif/registry.go b/internal/pushnotif/registry.go index 28233c85..511c390b 100644 --- a/internal/pushnotif/registry.go +++ b/internal/pushnotif/registry.go @@ -8,14 +8,16 @@ import ( // Registry manages push notification handlers. type Registry struct { - mu sync.RWMutex - handlers map[string]handlerEntry + mu sync.RWMutex + handlers map[string]Handler + protected map[string]bool } // NewRegistry creates a new push notification registry. func NewRegistry() *Registry { return &Registry{ - handlers: make(map[string]handlerEntry), + handlers: make(map[string]Handler), + protected: make(map[string]bool), } } @@ -30,10 +32,8 @@ func (r *Registry) RegisterHandler(pushNotificationName string, handler Handler, return fmt.Errorf("handler already registered for push notification: %s", pushNotificationName) } - r.handlers[pushNotificationName] = handlerEntry{ - handler: handler, - protected: protected, - } + r.handlers[pushNotificationName] = handler + r.protected[pushNotificationName] = protected return nil } @@ -43,16 +43,17 @@ func (r *Registry) UnregisterHandler(pushNotificationName string) error { r.mu.Lock() defer r.mu.Unlock() - entry, exists := r.handlers[pushNotificationName] + _, exists := r.handlers[pushNotificationName] if !exists { return fmt.Errorf("no handler registered for push notification: %s", pushNotificationName) } - if entry.protected { + if r.protected[pushNotificationName] { return fmt.Errorf("cannot unregister protected handler for push notification: %s", pushNotificationName) } delete(r.handlers, pushNotificationName) + delete(r.protected, pushNotificationName) return nil } @@ -62,11 +63,11 @@ func (r *Registry) GetHandler(pushNotificationName string) Handler { r.mu.RLock() defer r.mu.RUnlock() - entry, exists := r.handlers[pushNotificationName] + handler, exists := r.handlers[pushNotificationName] if !exists { return nil } - return entry.handler + return handler } // GetRegisteredPushNotificationNames returns a list of all registered push notification names. diff --git a/internal/pushnotif/types.go b/internal/pushnotif/types.go index 062e16fd..c88ea0b0 100644 --- a/internal/pushnotif/types.go +++ b/internal/pushnotif/types.go @@ -28,9 +28,3 @@ type RegistryInterface interface { GetRegisteredPushNotificationNames() []string HandleNotification(ctx context.Context, notification []interface{}) bool } - -// handlerEntry represents a registered handler with its protection status. -type handlerEntry struct { - handler Handler - protected bool -} diff --git a/push_notifications.go b/push_notifications.go index 03ea8a7a..ee86dade 100644 --- a/push_notifications.go +++ b/push_notifications.go @@ -35,7 +35,7 @@ func NewPushNotificationRegistry() *PushNotificationRegistry { // RegisterHandler registers a handler for a specific push notification name. func (r *PushNotificationRegistry) RegisterHandler(pushNotificationName string, handler PushNotificationHandler, protected bool) error { - return r.registry.RegisterHandler(pushNotificationName, &handlerWrapper{handler}, protected) + return r.registry.RegisterHandler(pushNotificationName, handler, protected) } // UnregisterHandler removes a handler for a specific push notification name. @@ -49,10 +49,8 @@ func (r *PushNotificationRegistry) GetHandler(pushNotificationName string) PushN if handler == nil { return nil } - if wrapper, ok := handler.(*handlerWrapper); ok { - return wrapper.handler - } - return nil + // The handler is already a PushNotificationHandler since we store it directly + return handler.(PushNotificationHandler) } // GetRegisteredPushNotificationNames returns a list of all registered push notification names. @@ -83,15 +81,13 @@ func (p *PushNotificationProcessor) GetHandler(pushNotificationName string) Push if handler == nil { return nil } - if wrapper, ok := handler.(*handlerWrapper); ok { - return wrapper.handler - } - return nil + // The handler is already a PushNotificationHandler since we store it directly + return handler.(PushNotificationHandler) } // RegisterHandler registers a handler for a specific push notification name. func (p *PushNotificationProcessor) RegisterHandler(pushNotificationName string, handler PushNotificationHandler, protected bool) error { - return p.processor.RegisterHandler(pushNotificationName, &handlerWrapper{handler}, protected) + return p.processor.RegisterHandler(pushNotificationName, handler, protected) } // UnregisterHandler removes a handler for a specific push notification name. @@ -143,14 +139,7 @@ func (v *VoidPushNotificationProcessor) GetRegistryForTesting() *PushNotificatio return nil } -// handlerWrapper wraps the public PushNotificationHandler interface to implement the internal Handler interface. -type handlerWrapper struct { - handler PushNotificationHandler -} -func (w *handlerWrapper) HandlePushNotification(ctx context.Context, notification []interface{}) bool { - return w.handler.HandlePushNotification(ctx, notification) -} // Redis Cluster push notification names const (