Skip to content

Commit 53162a1

Browse files
SK-2589 duplicate error
1 parent fad26d0 commit 53162a1

1 file changed

Lines changed: 22 additions & 6 deletions

File tree

Sources/Skyflow/collect/CollectRequestBody.swift

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,11 @@ internal class CollectRequestBody {
6060
) -> [String: Any]? {
6161
var tableMap: [String: Int] = [:]
6262
var payload: [[String: Any]] = []
63-
// var updateSkyflowIdMap: [String: Int] = [:]
6463
var updatePayload: [String: Any] = [:]
6564
self.callback = callback
6665
self.breakFlag = false
6766
self.tableSet = Set<String>()
6867
var index: Int = 0
69-
// var updateIndex: Int = 0
7068
var inputPayload: [[String: Any]] = []
7169

7270
if additionalFields != nil {
@@ -79,14 +77,16 @@ internal class CollectRequestBody {
7977
// add to update payload
8078
let skyflowID = entryDict["skyflowID"] as! String
8179
if updatePayload[skyflowID] != nil {
82-
var temp = updatePayload[skyflowID] as! [String: Any]
80+
let temp = updatePayload[skyflowID] as! [String: Any]
8381
// merge existing fields with new field
8482
var existingFields = temp["fields"] as! [String: Any]
8583
for (key, val) in fields {
84+
// CHECK IF KEY ALREADY PRESENTS
8685
existingFields[key] = val
8786
}
88-
temp["fields"] = existingFields
89-
updatePayload[skyflowID] = temp
87+
var updatedTemp = temp
88+
updatedTemp["fields"] = existingFields
89+
updatePayload[skyflowID] = updatedTemp
9090
} else {
9191
var temp: [String: Any] = [
9292
"table": tableName,
@@ -133,7 +133,23 @@ internal class CollectRequestBody {
133133
var temp = updatePayload[skyflowID] as! [String: Any]
134134
// merge existing fields with new field
135135
var existingFields = temp["fields"] as! [String: Any]
136-
existingFields[columnName] = value
136+
if existingFields[columnName] != nil {
137+
var hasElementValueMatchRule: Bool = false
138+
for validation in element.userValidationRules.rules {
139+
if validation is ElementValueMatchRule {
140+
hasElementValueMatchRule = true
141+
break;
142+
}
143+
}
144+
if(!hasElementValueMatchRule)
145+
{
146+
self.callback?.onFailure(ErrorCodes.DUPLICATE_ELEMENT_FOUND(values: [ element.columnName, element.tableName!]).getErrorObject(contextOptions: contextOptions))
147+
return nil
148+
}
149+
continue;
150+
} else {
151+
existingFields[columnName] = value
152+
}
137153
temp["fields"] = existingFields
138154
updatePayload[skyflowID] = temp
139155
} else {

0 commit comments

Comments
 (0)