99 lines
3.6 KiB
Go
99 lines
3.6 KiB
Go
package endpoints
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/influxdata/influxdb/v2"
|
|
)
|
|
|
|
// Service provides all the notification endpoint service behavior.
|
|
type Service struct {
|
|
endpointStore influxdb.NotificationEndpointService
|
|
secretSVC influxdb.SecretService
|
|
|
|
// TODO(jsteenb2): NUKE THESE 2 embedded services after fixing up the domain!
|
|
influxdb.UserResourceMappingService
|
|
influxdb.OrganizationService
|
|
}
|
|
|
|
// NewService constructs a new Service.
|
|
func NewService(store influxdb.NotificationEndpointService, secretSVC influxdb.SecretService, urmSVC influxdb.UserResourceMappingService, orgSVC influxdb.OrganizationService) *Service {
|
|
return &Service{
|
|
endpointStore: store,
|
|
secretSVC: secretSVC,
|
|
UserResourceMappingService: urmSVC,
|
|
OrganizationService: orgSVC,
|
|
}
|
|
}
|
|
|
|
var _ influxdb.NotificationEndpointService = (*Service)(nil)
|
|
|
|
// FindNotificationEndpointByID returns a single notification endpoint by ID.
|
|
func (s *Service) FindNotificationEndpointByID(ctx context.Context, id influxdb.ID) (influxdb.NotificationEndpoint, error) {
|
|
return s.endpointStore.FindNotificationEndpointByID(ctx, id)
|
|
}
|
|
|
|
// FindNotificationEndpoints returns a list of notification endpoints that match filter and the total count of matching notification endpoints.
|
|
// Additional options provide pagination & sorting.
|
|
func (s *Service) FindNotificationEndpoints(ctx context.Context, filter influxdb.NotificationEndpointFilter, opt ...influxdb.FindOptions) ([]influxdb.NotificationEndpoint, int, error) {
|
|
return s.endpointStore.FindNotificationEndpoints(ctx, filter, opt...)
|
|
}
|
|
|
|
// CreateNotificationEndpoint creates a new notification endpoint and sets b.ID with the new identifier.
|
|
func (s *Service) CreateNotificationEndpoint(ctx context.Context, edp influxdb.NotificationEndpoint, userID influxdb.ID) error {
|
|
err := s.endpointStore.CreateNotificationEndpoint(ctx, edp, userID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
secrets := make(map[string]string)
|
|
for _, fld := range edp.SecretFields() {
|
|
if fld.Value != nil {
|
|
secrets[fld.Key] = *fld.Value
|
|
}
|
|
}
|
|
if len(secrets) == 0 {
|
|
return nil
|
|
}
|
|
|
|
return s.secretSVC.PutSecrets(ctx, edp.GetOrgID(), secrets)
|
|
}
|
|
|
|
// UpdateNotificationEndpoint updates a single notification endpoint.
|
|
// Returns the new notification endpoint after update.
|
|
func (s *Service) UpdateNotificationEndpoint(ctx context.Context, id influxdb.ID, nr influxdb.NotificationEndpoint, userID influxdb.ID) (influxdb.NotificationEndpoint, error) {
|
|
nr.BackfillSecretKeys() // :sadpanda:
|
|
updatedEndpoint, err := s.endpointStore.UpdateNotificationEndpoint(ctx, id, nr, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
secrets := make(map[string]string)
|
|
for _, fld := range updatedEndpoint.SecretFields() {
|
|
if fld.Value != nil {
|
|
secrets[fld.Key] = *fld.Value
|
|
}
|
|
}
|
|
|
|
if len(secrets) == 0 {
|
|
return updatedEndpoint, nil
|
|
}
|
|
|
|
if err := s.secretSVC.PutSecrets(ctx, updatedEndpoint.GetOrgID(), secrets); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return updatedEndpoint, nil
|
|
}
|
|
|
|
// PatchNotificationEndpoint updates a single notification endpoint with changeset.
|
|
// Returns the new notification endpoint state after update.
|
|
func (s *Service) PatchNotificationEndpoint(ctx context.Context, id influxdb.ID, upd influxdb.NotificationEndpointUpdate) (influxdb.NotificationEndpoint, error) {
|
|
return s.endpointStore.PatchNotificationEndpoint(ctx, id, upd)
|
|
}
|
|
|
|
// DeleteNotificationEndpoint removes a notification endpoint by ID, returns secret fields, orgID for further deletion.
|
|
func (s *Service) DeleteNotificationEndpoint(ctx context.Context, id influxdb.ID) ([]influxdb.SecretField, influxdb.ID, error) {
|
|
return s.endpointStore.DeleteNotificationEndpoint(ctx, id)
|
|
}
|