Skip to content

Commit bd52c89

Browse files
authored
fix: Support rules when refreshing connection resources (#76)
* fix: Support rules when refreshing connection resources * fix: Issue when connection doesn't have any rules
1 parent d687a5c commit bd52c89

File tree

1 file changed

+80
-0
lines changed
  • internal/provider/connection

1 file changed

+80
-0
lines changed

internal/provider/connection/sdk.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package connection
22

33
import (
44
"encoding/json"
5+
"math/big"
56
"time"
67

78
"github.com/hashicorp/terraform-plugin-framework/types"
@@ -30,6 +31,9 @@ func (m *connectionResourceModel) Refresh(connection *hookdeck.Connection) {
3031
m.SourceID = types.StringValue(connection.Source.Id)
3132
m.TeamID = types.StringValue(connection.TeamId)
3233
m.UpdatedAt = types.StringValue(connection.UpdatedAt.Format(time.RFC3339))
34+
if len(connection.Rules) > 0 {
35+
m.Rules = refreshRules(connection)
36+
}
3337
}
3438

3539
func (m *connectionResourceModel) ToCreatePayload() *hookdeck.ConnectionCreateRequest {
@@ -125,3 +129,79 @@ func transformFilterRuleProperty(property *filterRuleProperty) *hookdeck.FilterR
125129
}
126130
return nil
127131
}
132+
133+
func refreshRules(connection *hookdeck.Connection) []rule {
134+
var rules []rule = []rule{}
135+
136+
for _, ruleItem := range connection.Rules {
137+
if ruleItem.Delay != nil {
138+
delayRule := delayRule{
139+
Delay: types.Int64Value(int64(ruleItem.Delay.Delay)),
140+
}
141+
rules = append(rules, rule{DelayRule: &delayRule})
142+
}
143+
if ruleItem.Filter != nil {
144+
filterRule := filterRule{}
145+
if ruleItem.Filter.Body != nil {
146+
filterRule.Body = refreshFilterRuleProperty(ruleItem.Filter.Body)
147+
}
148+
if ruleItem.Filter.Headers != nil {
149+
filterRule.Headers = refreshFilterRuleProperty(ruleItem.Filter.Headers)
150+
}
151+
if ruleItem.Filter.Path != nil {
152+
filterRule.Path = refreshFilterRuleProperty(ruleItem.Filter.Path)
153+
}
154+
if ruleItem.Filter.Query != nil {
155+
filterRule.Query = refreshFilterRuleProperty(ruleItem.Filter.Query)
156+
}
157+
rules = append(rules, rule{FilterRule: &filterRule})
158+
}
159+
if ruleItem.Retry != nil {
160+
retryRule := retryRule{}
161+
if ruleItem.Retry.Count != nil {
162+
retryRule.Count = types.Int64Value(int64(*ruleItem.Retry.Count))
163+
}
164+
if ruleItem.Retry.Interval != nil {
165+
retryRule.Interval = types.Int64Value(int64(*ruleItem.Retry.Interval))
166+
}
167+
retryRule.Strategy = types.StringValue((string)(ruleItem.Retry.Strategy))
168+
rules = append(rules, rule{RetryRule: &retryRule})
169+
}
170+
if ruleItem.Transform != nil {
171+
transformRule := transformRule{
172+
// in this case (refresh), the ID should always exist
173+
// so we don't have to worry the ruleItem.Transform.TransformationId is nil
174+
TransformationID: types.StringValue(*ruleItem.Transform.TransformationId),
175+
}
176+
rules = append(rules, rule{TransformRule: &transformRule})
177+
}
178+
}
179+
180+
return rules
181+
}
182+
183+
func refreshFilterRuleProperty(property *hookdeck.FilterRuleProperty) *filterRuleProperty {
184+
if property == nil {
185+
return nil
186+
}
187+
188+
var filterRuleProperty = filterRuleProperty{}
189+
190+
if property.BooleanOptional != nil {
191+
filterRuleProperty.Boolean = types.BoolValue(*property.BooleanOptional)
192+
}
193+
if property.DoubleOptional != nil {
194+
number := new(big.Float)
195+
number.SetFloat64(*property.DoubleOptional)
196+
filterRuleProperty.Number = types.NumberValue(number)
197+
}
198+
if property.StringOptional != nil {
199+
filterRuleProperty.String = types.StringValue(*property.StringOptional)
200+
}
201+
if property.StringUnknownMapOptional != nil {
202+
marshalledJSON, _ := json.Marshal(property.StringUnknownMapOptional)
203+
filterRuleProperty.JSON = types.StringValue(string(marshalledJSON))
204+
}
205+
206+
return &filterRuleProperty
207+
}

0 commit comments

Comments
 (0)