Files
sendico/api/edge/callbacks/internal/subscriptions/service.go
2026-03-03 01:07:35 +01:00

63 lines
1.7 KiB
Go

package subscriptions
import (
"context"
"strings"
"github.com/tech/sendico/edge/callbacks/internal/model"
"github.com/tech/sendico/edge/callbacks/internal/storage"
"github.com/tech/sendico/pkg/merrors"
"github.com/tech/sendico/pkg/mlogger"
"github.com/tech/sendico/pkg/mutil/mzap"
"go.mongodb.org/mongo-driver/v2/bson"
"go.uber.org/zap"
)
type service struct {
logger mlogger.Logger
repo storage.EndpointRepo
}
// New creates endpoint resolver service.
func New(deps Dependencies) (Resolver, error) {
if deps.EndpointRepo == nil {
return nil, merrors.InvalidArgument("subscriptions: endpoint repo is required", "endpointRepo")
}
logger := deps.Logger
if logger == nil {
logger = zap.NewNop()
}
return &service{
logger: logger.Named("subscriptions"),
repo: deps.EndpointRepo,
}, nil
}
func (s *service) Resolve(ctx context.Context, eventType string, organizationRef bson.ObjectID) ([]model.Endpoint, error) {
if organizationRef == bson.NilObjectID {
return nil, merrors.InvalidArgument("subscriptions: client id is required", "clientID")
}
if strings.TrimSpace(eventType) == "" {
return nil, merrors.InvalidArgument("subscriptions: event type is required", "eventType")
}
endpoints, err := s.repo.FindActive(ctx, eventType, organizationRef)
if err != nil {
s.logger.Warn("Failed to resolve active endpoints",
zap.String("event_type", eventType),
mzap.ObjRef("organization_ref", organizationRef),
zap.Error(err),
)
return nil, err
}
s.logger.Debug("Resolved active endpoints",
zap.String("event_type", eventType),
mzap.ObjRef("organization_ref", organizationRef),
zap.Int("endpoints", len(endpoints)),
)
return endpoints, nil
}