Commit 49046bc6 authored by Chaitanya Pandit's avatar Chaitanya Pandit
Browse files

Fixes:

- Upload schema properties before edges
- Returning default for mapSchemaValueType
parent e869df45
Showing with 54 additions and 13 deletions
+54 -13
......@@ -34,8 +34,10 @@ extension ItemRecord {
return "Bool"
case "datetime":
return "DateTime"
case "blob":
return "Text"
default:
return nil
return nativeType
}
}
......
......@@ -12,7 +12,8 @@ import Combine
enum SyncControllerState: String, Codable, Hashable, DatabaseValueConvertible {
case idle
case started
case uploadedSchema
case uploadedSchemaProperties
case uploadedSchemaEdges
case uploadedItems
case uploadedEdges
case downloadedItems
......@@ -34,8 +35,10 @@ class SyncController {
syncing = true
try? downloadItems()
case .downloadedItems:
try? uploadSchema()
case .uploadedSchema:
try? uploadSchemaProperties()
case .uploadedSchemaProperties:
try? uploadSchemaEdges()
case .uploadedSchemaEdges:
try? uploadItems()
case .uploadedItems:
try? uploadEdges()
......@@ -76,13 +79,13 @@ class SyncController {
self.completion = nil
}
func uploadSchema() throws {
let syncPayload = try makeSyncSchemaData()
func uploadSchemaProperties() throws {
let syncPayload = try makeSyncSchemaPropertiesData()
guard syncPayload.createItems.count > 0
|| syncPayload.updateItems.count > 0
|| syncPayload.deleteItems.count > 0 else {
self.state = .uploadedSchema
self.state = .uploadedSchemaProperties
return
}
......@@ -95,7 +98,30 @@ class SyncController {
return
}
self.state = .uploadedSchema
self.state = .uploadedSchemaProperties
})
}
func uploadSchemaEdges() throws {
let syncPayload = try makeSyncSchemaEdgesData()
guard syncPayload.createItems.count > 0
|| syncPayload.updateItems.count > 0
|| syncPayload.deleteItems.count > 0 else {
self.state = .uploadedSchemaEdges
return
}
try bulkAction(bulkPayload: syncPayload, completion: { error in
try? ItemRecord.didSyncItems(syncItems: syncPayload, error: error)
guard error == nil else {
self.lastError = error
self.state = .failed
return
}
self.state = .uploadedSchemaEdges
})
}
......@@ -170,7 +196,7 @@ class SyncController {
})
}
func makeSyncSchemaData() throws -> PodAPIPayload.BulkAction {
func makeSyncSchemaPropertiesData() throws -> PodAPIPayload.BulkAction {
guard let pool = databaseController.databasePool else {
throw StringError(description: "Database pool not available")
}
......@@ -181,17 +207,30 @@ class SyncController {
&& Column(ItemRecord.Columns.syncState.rawValue) == SyncState.create)
.fetchAll(db)
let syncPropertyItems = schemaPropertyItems.compactMap{$0.schemaPropertyDict(db: db)}
let bulkAction = PodAPIPayload.BulkAction(
createItems: syncPropertyItems,
updateItems: [],
deleteItems: [],
createEdges: [])
return bulkAction
}
}
func makeSyncSchemaEdgesData() throws -> PodAPIPayload.BulkAction {
guard let pool = databaseController.databasePool else {
throw StringError(description: "Database pool not available")
}
return try pool.read { (db) in
let schemaEdgeItems = try ItemRecord
.filter(Column(ItemRecord.Columns.type.rawValue) == "ItemEdgeSchema"
&& Column(ItemRecord.Columns.syncState.rawValue) == SyncState.create)
.fetchAll(db)
let syncEdgeItems = schemaEdgeItems.compactMap{$0.schemaEdgeDict(db: db)}
let syncItems = syncPropertyItems + syncEdgeItems
let bulkAction = PodAPIPayload.BulkAction(
createItems: syncItems,
createItems: syncEdgeItems,
updateItems: [],
deleteItems: [],
createEdges: [])
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment