Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions incident_trigger_subscription_models.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package flashduty

// IncidentTriggerSubscriptionUpsertRequest creates or updates an incident trigger subscription.
//
// Enabled is pointer-backed because omitting it defaults to true, while a
// non-nil false explicitly disables the subscription.
type IncidentTriggerSubscriptionUpsertRequest struct {
// On-call channel IDs whose new incidents should trigger the consumer.
ChannelIDs []int64 `json:"channel_ids,omitempty" toon:"channel_ids,omitempty"`
// Consumer system. Use `fc_safari` for AI SRE automation rules.
Consumer string `json:"consumer,omitempty" toon:"consumer,omitempty"`
// Consumer-owned reference, such as an Automation rule ID.
ConsumerRef string `json:"consumer_ref,omitempty" toon:"consumer_ref,omitempty"`
// Whether the subscription is enabled. Defaults to true when omitted.
Enabled *bool `json:"enabled,omitempty" toon:"enabled,omitempty"`
// Incident severities to subscribe to. `Ok` is not valid.
Severities []string `json:"severities,omitempty" toon:"severities,omitempty"`
// Subscription source. Use `ai_sre_automation` for AI SRE automation rules.
Source string `json:"source,omitempty" toon:"source,omitempty"`
// Existing subscription ID. Omit to create or upsert by source, consumer, and consumer_ref.
SubscriptionID string `json:"subscription_id,omitempty" toon:"subscription_id,omitempty"`
}
29 changes: 29 additions & 0 deletions incident_trigger_subscription_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package flashduty

import (
"encoding/json"
"strings"
"testing"
)

func TestIncidentTriggerSubscriptionUpsertRequestPreservesDisabledValue(t *testing.T) {
var req IncidentTriggerSubscriptionUpsertRequest
if err := json.Unmarshal([]byte(`{
"source":"ai_sre_automation",
"consumer":"fc_safari",
"consumer_ref":"auto_1",
"channel_ids":[2468013579],
"severities":["Critical"],
"enabled":false
}`), &req); err != nil {
t.Fatal(err)
}
payload, err := json.Marshal(&req)
if err != nil {
t.Fatal(err)
}
got := string(payload)
if !strings.Contains(got, `"enabled":false`) {
t.Fatalf("payload %s missing explicit enabled=false", got)
}
}
9 changes: 5 additions & 4 deletions internal/cmd/gen/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,11 @@ func run() error {
schemas: asMap(asMap(spec["components"])["schemas"]),
emptyTypes: map[string]bool{},
skip: map[string]bool{
"SuccessEnvelope": true,
"ErrorResponse": true,
"DutyError": true,
"AutomationRuleUpdateRequest": true, // hand-written to preserve partial-update pointer semantics.
"SuccessEnvelope": true,
"ErrorResponse": true,
"DutyError": true,
"AutomationRuleUpdateRequest": true, // hand-written to preserve partial-update pointer semantics.
"IncidentTriggerSubscriptionUpsertRequest": true, // hand-written to preserve enabled=false.
},
queued: map[string]bool{},
synth: map[string]any{},
Expand Down
18 changes: 0 additions & 18 deletions models_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.