Skip to content

Commit bd9a54b

Browse files
committed
update NC interface signatures, omit deprecated subscribable, backfill subscribable
1 parent 57017b9 commit bd9a54b

File tree

1 file changed

+36
-10
lines changed

1 file changed

+36
-10
lines changed

notification_configuration.go

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ var _ NotificationConfigurations = (*notificationConfigurations)(nil)
2020
// https://developer.hashicorp.com/terraform/cloud-docs/api-docs/notification-configurations
2121
type NotificationConfigurations interface {
2222
// List all the notification configurations within a workspace.
23-
List(ctx context.Context, workspaceID string, options *NotificationConfigurationListOptions) (*NotificationConfigurationList, error)
23+
List(ctx context.Context, subscribableID string, options *NotificationConfigurationListOptions) (*NotificationConfigurationList, error)
2424

2525
// Create a new notification configuration with the given options.
26-
Create(ctx context.Context, workspaceID string, options NotificationConfigurationCreateOptions) (*NotificationConfiguration, error)
26+
Create(ctx context.Context, subscribableID string, options NotificationConfigurationCreateOptions) (*NotificationConfiguration, error)
2727

2828
// Read a notification configuration by its ID.
2929
Read(ctx context.Context, notificationConfigurationID string) (*NotificationConfiguration, error)
@@ -107,7 +107,7 @@ type NotificationConfiguration struct {
107107

108108
// Relations
109109
// DEPRECATED. The subscribable field is polymorphic. Use NotificationConfigurationSubscribableChoice instead.
110-
Subscribable *Workspace `jsonapi:"relation,subscribable"`
110+
Subscribable *Workspace `jsonapi:"relation,subscribable,omitempty"`
111111
SubscribableChoice *NotificationConfigurationSubscribableChoice `jsonapi:"polyrelation,subscribable"`
112112

113113
EmailUsers []*User `jsonapi:"relation,users"`
@@ -128,7 +128,7 @@ type DeliveryResponse struct {
128128
type NotificationConfigurationListOptions struct {
129129
ListOptions
130130

131-
SubscribableChoice *NotificationConfigurationSubscribableChoice `jsonapi:"polyrelation,subscribable"`
131+
SubscribableChoice *NotificationConfigurationSubscribableChoice
132132
}
133133

134134
// NotificationConfigurationCreateOptions represents the options for
@@ -204,18 +204,28 @@ type NotificationConfigurationUpdateOptions struct {
204204
// List all the notification configurations associated with a workspace.
205205
func (s *notificationConfigurations) List(ctx context.Context, subscribableID string, options *NotificationConfigurationListOptions) (*NotificationConfigurationList, error) {
206206
var u string
207-
if options == nil || options.SubscribableChoice == nil || options.SubscribableChoice.Workspace != nil {
208-
if !validStringID(&subscribableID) {
209-
return nil, ErrInvalidWorkspaceID
207+
if options == nil {
208+
options = &NotificationConfigurationListOptions{
209+
SubscribableChoice: &NotificationConfigurationSubscribableChoice{
210+
Workspace: &Workspace{ID: subscribableID},
211+
},
210212
}
211-
u = fmt.Sprintf("workspaces/%s/notification-configurations", url.PathEscape(subscribableID))
212-
} else if options.SubscribableChoice.Team != nil {
213+
} else if options.SubscribableChoice == nil {
214+
options.SubscribableChoice = &NotificationConfigurationSubscribableChoice{
215+
Workspace: &Workspace{ID: subscribableID},
216+
}
217+
}
218+
219+
if options.SubscribableChoice.Team != nil {
213220
if !validStringID(&subscribableID) {
214221
return nil, ErrInvalidTeamID
215222
}
216223
u = fmt.Sprintf("teams/%s/notification-configurations", url.PathEscape(subscribableID))
217224
} else {
218-
return nil, ErrInvalidNotificationConfigSubscribableChoice
225+
if !validStringID(&subscribableID) {
226+
return nil, ErrInvalidWorkspaceID
227+
}
228+
u = fmt.Sprintf("workspaces/%s/notification-configurations", url.PathEscape(subscribableID))
219229
}
220230

221231
req, err := s.client.NewRequest("GET", u, options)
@@ -229,6 +239,10 @@ func (s *notificationConfigurations) List(ctx context.Context, subscribableID st
229239
return nil, err
230240
}
231241

242+
for i := range ncl.Items {
243+
backfillDeprecatedSubscribable(ncl.Items[i])
244+
}
245+
232246
return ncl, nil
233247
}
234248

@@ -270,6 +284,8 @@ func (s *notificationConfigurations) Create(ctx context.Context, subscribableID
270284
return nil, err
271285
}
272286

287+
backfillDeprecatedSubscribable(nc)
288+
273289
return nc, nil
274290
}
275291

@@ -394,6 +410,16 @@ func (o NotificationConfigurationUpdateOptions) valid() error {
394410
return nil
395411
}
396412

413+
func backfillDeprecatedSubscribable(notification *NotificationConfiguration) {
414+
if notification.Subscribable != nil || notification.SubscribableChoice == nil {
415+
return
416+
}
417+
418+
if notification.SubscribableChoice.Workspace != nil {
419+
notification.Subscribable = notification.SubscribableChoice.Workspace
420+
}
421+
}
422+
397423
func validNotificationTriggerType(triggers []NotificationTriggerType) bool {
398424
for _, t := range triggers {
399425
switch t {

0 commit comments

Comments
 (0)