Skip to content

Commit 0cc3926

Browse files
committed
Support partial merging in messaging config
1 parent e803ff2 commit 0cc3926

File tree

6 files changed

+57
-12
lines changed

6 files changed

+57
-12
lines changed

pkg/lib/config/feature_messaging.go

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ type MessagingFeatureConfig struct {
2424
EmailUsage *UsageLimitConfig `json:"email_usage,omitempty"`
2525
WhatsappUsage *UsageLimitConfig `json:"whatsapp_usage,omitempty"`
2626

27-
SMSUsageCountDisabled bool `json:"sms_usage_count_disabled,omitempty"`
28-
WhatsappUsageCountDisabled bool `json:"whatsapp_usage_count_disabled,omitempty"`
27+
SMSUsageCountDisabled *bool `json:"sms_usage_count_disabled,omitempty"`
28+
WhatsappUsageCountDisabled *bool `json:"whatsapp_usage_count_disabled,omitempty"`
2929

30-
TemplateCustomizationDisabled bool `json:"template_customization_disabled,omitempty"`
30+
TemplateCustomizationDisabled *bool `json:"template_customization_disabled,omitempty"`
3131

32-
CustomSMTPDisabled bool `json:"custom_smtp_disabled,omitempty"`
32+
CustomSMTPDisabled *bool `json:"custom_smtp_disabled,omitempty"`
3333
}
3434

3535
var _ MergeableFeatureConfig = &MessagingFeatureConfig{}
@@ -38,7 +38,36 @@ func (c *MessagingFeatureConfig) Merge(layer *FeatureConfig) MergeableFeatureCon
3838
if layer.Messaging == nil {
3939
return c
4040
}
41-
return layer.Messaging
41+
var merged *MessagingFeatureConfig = c
42+
if merged == nil {
43+
merged = &MessagingFeatureConfig{}
44+
}
45+
if layer.Messaging.RateLimits != nil {
46+
merged.RateLimits = layer.Messaging.RateLimits
47+
}
48+
if layer.Messaging.SMSUsage != nil {
49+
merged.SMSUsage = layer.Messaging.SMSUsage
50+
}
51+
if layer.Messaging.EmailUsage != nil {
52+
merged.EmailUsage = layer.Messaging.EmailUsage
53+
}
54+
if layer.Messaging.WhatsappUsage != nil {
55+
merged.WhatsappUsage = layer.Messaging.WhatsappUsage
56+
}
57+
if layer.Messaging.SMSUsageCountDisabled != nil {
58+
merged.SMSUsageCountDisabled = layer.Messaging.SMSUsageCountDisabled
59+
}
60+
if layer.Messaging.WhatsappUsageCountDisabled != nil {
61+
merged.WhatsappUsageCountDisabled = layer.Messaging.WhatsappUsageCountDisabled
62+
}
63+
if layer.Messaging.TemplateCustomizationDisabled != nil {
64+
merged.TemplateCustomizationDisabled = layer.Messaging.TemplateCustomizationDisabled
65+
}
66+
if layer.Messaging.CustomSMTPDisabled != nil {
67+
merged.CustomSMTPDisabled = layer.Messaging.CustomSMTPDisabled
68+
}
69+
70+
return merged
4271
}
4372

4473
func (c *MessagingFeatureConfig) SetDefaults() {
@@ -57,6 +86,19 @@ func (c *MessagingFeatureConfig) SetDefaults() {
5786
Enabled: newBool(false),
5887
}
5988
}
89+
90+
if c.SMSUsageCountDisabled == nil {
91+
c.SMSUsageCountDisabled = newBool(false)
92+
}
93+
if c.WhatsappUsageCountDisabled == nil {
94+
c.WhatsappUsageCountDisabled = newBool(false)
95+
}
96+
if c.TemplateCustomizationDisabled == nil {
97+
c.TemplateCustomizationDisabled = newBool(false)
98+
}
99+
if c.CustomSMTPDisabled == nil {
100+
c.CustomSMTPDisabled = newBool(false)
101+
}
60102
}
61103

62104
var _ = FeatureConfigSchema.Add("MessagingRateLimitsFeatureConfig", `

pkg/lib/messaging/sender.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ func (s *Sender) SendSMSInNewGoroutine(ctx context.Context, msgType translation.
224224
Sender: opts.Sender,
225225
Recipient: opts.To,
226226
Type: string(msgType),
227-
IsNotCountedInUsage: s.MessagingFeatureConfig.SMSUsageCountDisabled,
227+
IsNotCountedInUsage: *s.MessagingFeatureConfig.SMSUsageCountDisabled,
228228
})
229229
})
230230
if err != nil {
@@ -327,7 +327,7 @@ func (s *Sender) SendWhatsappImmediately(ctx context.Context, msgType translatio
327327
err = s.Events.DispatchEventImmediately(ctx, &nonblocking.WhatsappSentEventPayload{
328328
Recipient: opts.To,
329329
Type: string(msgType),
330-
IsNotCountedInUsage: s.MessagingFeatureConfig.WhatsappUsageCountDisabled,
330+
IsNotCountedInUsage: *s.MessagingFeatureConfig.WhatsappUsageCountDisabled,
331331
})
332332
if err != nil {
333333
s.Logger.WithError(err).Errorf("failed to emit %v event", nonblocking.WhatsappSent)

pkg/util/template/resource.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func isTemplateUpdateAllowed(ctx context.Context) (bool, error) {
2626
if !ok || fc == nil {
2727
return false, ErrMissingFeatureFlagInCtx
2828
}
29-
if fc.Messaging.TemplateCustomizationDisabled {
29+
if *fc.Messaging.TemplateCustomizationDisabled {
3030
return false, ErrUpdateDisallowed
3131
}
3232
return true, nil

pkg/util/template/resource_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,8 @@ func TestTemplateResource(t *testing.T) {
384384
}
385385
Convey("Should not allow update if disallowed", func() {
386386
featureConfig := config.NewEffectiveDefaultFeatureConfig()
387-
featureConfig.Messaging.TemplateCustomizationDisabled = true
387+
trueVal := true
388+
featureConfig.Messaging.TemplateCustomizationDisabled = &trueVal
388389
ctx := context.Background()
389390
ctx = context.WithValue(ctx, configsource.ContextKeyFeatureConfig, featureConfig)
390391
res, err := messageHtml.UpdateResource(ctx, nil, &resourceFile, []byte("asdf"))
@@ -417,7 +418,8 @@ func TestTemplateResource(t *testing.T) {
417418
}
418419
Convey("Should not allow update if disallowed", func() {
419420
featureConfig := config.NewEffectiveDefaultFeatureConfig()
420-
featureConfig.Messaging.TemplateCustomizationDisabled = true
421+
trueVal := true
422+
featureConfig.Messaging.TemplateCustomizationDisabled = &trueVal
421423
ctx := context.Background()
422424
ctx = context.WithValue(ctx, configsource.ContextKeyFeatureConfig, featureConfig)
423425
res, err := messageTxt.UpdateResource(ctx, nil, &resourceFile, []byte("asdf"))

pkg/util/template/translation.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ func (t *translationJSON) processAppTranslationData(ctx context.Context, data []
155155
if !ok || fc == nil {
156156
return nil, ErrMissingFeatureFlagInCtx
157157
}
158-
isCustomizationDisallowed := fc.Messaging.TemplateCustomizationDisabled
158+
isCustomizationDisallowed := *fc.Messaging.TemplateCustomizationDisabled
159159

160160
appTranslationRaw := make(map[string]interface{})
161161
err := json.Unmarshal(data, &appTranslationRaw)

pkg/util/template/translation_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,8 @@ func TestTranslationResource(t *testing.T) {
792792

793793
Convey("it should skip write value for email template if disallowed by feature flag", func() {
794794
featureConfig := config.NewEffectiveDefaultFeatureConfig()
795-
featureConfig.Messaging.TemplateCustomizationDisabled = true
795+
trueVal := true
796+
featureConfig.Messaging.TemplateCustomizationDisabled = &trueVal
796797
ctx := context.Background()
797798
ctx = context.WithValue(ctx, configsource.ContextKeyFeatureConfig, featureConfig)
798799
updated, err := template.TranslationJSON.UpdateResource(

0 commit comments

Comments
 (0)