restore method
Implementation
Future<RestoreResult> restore(
{required String collectionId, String? content}) async {
/*
if content is not provided plugin try to find specific backup file.
if there is no matching backup file, this return an error.
*/
RestoreResult restoreResult = RestoreResult();
restoreResult.collection = collectionId;
if (content == null) {
var file = await _localFile(collectionId);
if (await file.exists()) {
print("file found");
restoreResult.source = "FILE";
content = file.readAsStringSync();
} else {
print("file not found");
restoreResult.hasError = true;
restoreResult.message =
"Backup file can't find. Set the content attribute.";
return restoreResult;
}
} else {
print("content has");
restoreResult.source = "ATTRIBUTE";
}
var jsonList = jsonDecode(content) as List;
if (jsonList.isEmpty) {
restoreResult.hasError = true;
restoreResult.message = "empty content found!";
return restoreResult;
}
CollectionReference collectionReference =
FirebaseFirestore.instance.collection(collectionId);
int done = 0;
for (var obj in jsonList) {
if (obj['id'] != null) {
collectionReference.doc(obj['id']).set(obj);
} else {
collectionReference.add(obj);
}
done++;
}
if (done != jsonList.length) {
restoreResult.hasError = true;
restoreResult.message = "all objects not restored correctly!";
return restoreResult;
}
restoreResult.hasError = false;
restoreResult.message = "$done objects successfully restored!";
return restoreResult;
}