@@ -90,7 +90,7 @@ func (d DecisionsWorkflows) AutomaticDecisionToCase(
90
90
return false , nil
91
91
}
92
92
93
- if scenario . DecisionToCaseWorkflowType == models . WorkflowCreateCase {
93
+ createNewCaseForDecision := func ( ctx context. Context ) ( bool , error ) {
94
94
caseName , err := d .caseNameEvaluator .EvalCaseName (ctx , params , scenario )
95
95
if err != nil {
96
96
return false , errors .Wrap (err , "error creating case for decision" )
@@ -101,46 +101,25 @@ func (d DecisionsWorkflows) AutomaticDecisionToCase(
101
101
if err != nil {
102
102
return false , errors .Wrap (err , "error creating case for decision" )
103
103
}
104
+
104
105
err = d .webhookEventCreator .CreateWebhookEvent (ctx , tx , models.WebhookEventCreate {
105
106
Id : webhookEventId ,
106
107
OrganizationId : newCase .OrganizationId ,
107
108
EventContent : models .NewWebhookEventCaseCreatedWorkflow (newCase .GetMetadata ()),
108
109
})
109
- if err != nil {
110
- return false , err
111
- }
112
-
113
- return true , nil
110
+ return true , err
114
111
}
115
112
116
- if scenario .DecisionToCaseWorkflowType == models .WorkflowAddToCaseIfPossible {
113
+ switch scenario .DecisionToCaseWorkflowType {
114
+ case models .WorkflowCreateCase :
115
+ return createNewCaseForDecision (ctx )
116
+ case models .WorkflowAddToCaseIfPossible :
117
117
matchedCase , added , err := d .addToOpenCase (ctx , tx , scenario , decision )
118
118
if err != nil {
119
119
return false , errors .Wrap (err , "error adding decision to open case" )
120
120
}
121
-
122
121
if ! added {
123
- caseName , err := d .caseNameEvaluator .EvalCaseName (ctx , params , scenario )
124
- if err != nil {
125
- return false , errors .Wrap (err , "error creating case for decision" )
126
- }
127
-
128
- input := automaticCreateCaseAttributes (scenario , decision , caseName )
129
- newCase , err := d .caseEditor .CreateCase (ctx , tx , "" , input , false )
130
- if err != nil {
131
- return false , errors .Wrap (err , "error creating case for decision" )
132
- }
133
-
134
- err = d .webhookEventCreator .CreateWebhookEvent (ctx , tx , models.WebhookEventCreate {
135
- Id : webhookEventId ,
136
- OrganizationId : newCase .OrganizationId ,
137
- EventContent : models .NewWebhookEventCaseCreatedWorkflow (newCase .GetMetadata ()),
138
- })
139
- if err != nil {
140
- return false , err
141
- }
142
-
143
- return true , nil
122
+ return createNewCaseForDecision (ctx )
144
123
}
145
124
146
125
err = d .webhookEventCreator .CreateWebhookEvent (ctx , tx , models.WebhookEventCreate {
@@ -153,9 +132,9 @@ func (d DecisionsWorkflows) AutomaticDecisionToCase(
153
132
}
154
133
155
134
return true , nil
135
+ default :
136
+ return false , errors .New (fmt .Sprintf ("unknown workflow type: %s" , scenario .DecisionToCaseWorkflowType ))
156
137
}
157
-
158
- return false , errors .New (fmt .Sprintf ("unknown workflow type: %s" , scenario .DecisionToCaseWorkflowType ))
159
138
}
160
139
161
140
func automaticCreateCaseAttributes (
@@ -190,29 +169,32 @@ func (d DecisionsWorkflows) addToOpenCase(
190
169
return models.CaseMetadata {}, false , errors .Wrap (err , "error selecting cases with pivot" )
191
170
}
192
171
193
- if len (eligibleCases ) == 0 {
172
+ var bestMatchCase models.CaseMetadata
173
+ switch len (eligibleCases ) {
174
+ case 0 :
194
175
return models.CaseMetadata {}, false , nil
195
- }
196
-
197
- caseIds := make ([]string , 0 , len (eligibleCases ))
198
- for _ , c := range eligibleCases {
199
- caseIds = append (caseIds , c .Id )
200
- }
176
+ case 1 :
177
+ bestMatchCase = eligibleCases [0 ]
178
+ default :
179
+ caseIds := make ([]string , len (eligibleCases ))
180
+ for i , c := range eligibleCases {
181
+ caseIds [i ] = c .Id
182
+ }
201
183
202
- decisionCounts , err := d .repository .CountDecisionsByCaseIds (ctx , tx , scenario .OrganizationId , caseIds )
203
- if err != nil {
204
- return models.CaseMetadata {}, false , errors .Wrap (err , "error counting decisions by case ids" )
205
- }
184
+ decisionCounts , err := d .repository .CountDecisionsByCaseIds (ctx , tx , scenario .OrganizationId , caseIds )
185
+ if err != nil {
186
+ return models.CaseMetadata {}, false , errors .Wrap (err , "error counting decisions by case ids" )
187
+ }
206
188
207
- cases := make ([]caseMetadataWithDecisionCount , 0 , len (eligibleCases ))
208
- for _ , c := range eligibleCases {
209
- cases = append (cases , caseMetadataWithDecisionCount {
210
- CaseMetadata : c ,
211
- DecisionCount : decisionCounts [c .Id ],
212
- })
189
+ cases := make ([]caseMetadataWithDecisionCount , len (eligibleCases ))
190
+ for i , c := range eligibleCases {
191
+ cases [i ] = caseMetadataWithDecisionCount {
192
+ CaseMetadata : c ,
193
+ DecisionCount : decisionCounts [c .Id ],
194
+ }
195
+ }
196
+ bestMatchCase = findBestMatchCase (cases )
213
197
}
214
-
215
- bestMatchCase := findBestMatchCase (cases )
216
198
err = d .caseEditor .UpdateDecisionsWithEvents (ctx , tx , bestMatchCase .Id , "" , []string {decision .DecisionId })
217
199
if err != nil {
218
200
return models.CaseMetadata {}, false , errors .Wrap (err , "error updating case" )
0 commit comments