File size: 1,967 Bytes
d6f631f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | package httpdriver
import (
"context"
"errors"
"net/http"
"github.com/openmeterio/openmeter/openmeter/billing"
"github.com/openmeterio/openmeter/openmeter/namespace/namespacedriver"
"github.com/openmeterio/openmeter/openmeter/notification"
"github.com/openmeterio/openmeter/openmeter/notification/internal"
"github.com/openmeterio/openmeter/pkg/framework/commonhttp"
"github.com/openmeterio/openmeter/pkg/framework/transport/httptransport"
)
type Handler interface {
ChannelHandler
RuleHandler
EventHandler
}
type ChannelHandler interface {
ListChannels() ListChannelsHandler
CreateChannel() CreateChannelHandler
DeleteChannel() DeleteChannelHandler
GetChannel() GetChannelHandler
UpdateChannel() UpdateChannelHandler
}
type RuleHandler interface {
ListRules() ListRulesHandler
CreateRule() CreateRuleHandler
DeleteRule() DeleteRuleHandler
GetRule() GetRuleHandler
UpdateRule() UpdateRuleHandler
TestRule() TestRuleHandler
}
type EventHandler interface {
ListEvents() ListEventsHandler
GetEvent() GetEventHandler
ResendEvent() ResendEventHandler
}
var _ Handler = (*handler)(nil)
type handler struct {
service notification.Service
testEventGenerator *internal.TestEventGenerator
namespaceDecoder namespacedriver.NamespaceDecoder
options []httptransport.HandlerOption
}
func (h *handler) resolveNamespace(ctx context.Context) (string, error) {
ns, ok := h.namespaceDecoder.GetNamespace(ctx)
if !ok {
return "", commonhttp.NewHTTPError(http.StatusInternalServerError, errors.New("internal server error"))
}
return ns, nil
}
func New(
namespaceDecoder namespacedriver.NamespaceDecoder,
service notification.Service,
billingService billing.Service,
options ...httptransport.HandlerOption,
) Handler {
return &handler{
service: service,
testEventGenerator: internal.NewTestEventGenerator(billingService),
namespaceDecoder: namespaceDecoder,
options: options,
}
}
|