restoreBackupOfMenstrualCycleData method
Restore backup of user's data
Implementation
Future<bool> restoreBackupOfMenstrualCycleData(
{bool isDecryptData = true,
required Map<String, dynamic> backupData,
required String customerId}) async {
if (backupData.isEmpty) return false;
final dbHelper = MenstrualCycleDbHelper.instance;
Map<String, dynamic> decryptData = {};
if (isDecryptData) {
if (backupData.containsKey("encryptedData")) {
try {
decryptData = jsonDecode(
Encryption.instance.decrypt(backupData["encryptedData"]));
} catch (e) {
throw "Error decrypting data: $e";
}
} else {
throw "Encrypted data with 'encryptedData' key is required";
}
} else {
decryptData = backupData;
}
// Restore Symptom Logs Data
List<dynamic> symptomsLogsData = decryptData["allTableData"]
[MenstrualCycleDbHelper.tableDailyUserSymptomsLogsData] ??
[];
final encryption = Encryption.instance;
if (symptomsLogsData.isNotEmpty) {
dbHelper.clearSymptomsLog(customerId);
for (var log in symptomsLogsData) {
UserSymptomsLogs userSymptomLog = UserSymptomsLogs.fromJson(log);
String encryptedData =
encryption.encrypt(json.encode(userSymptomLog.symptomData!));
Map<String, dynamic> userData = {
MenstrualCycleDbHelper.columnCustomerId:
encryption.encrypt(customerId),
MenstrualCycleDbHelper.columnUserEncryptData: encryptedData,
MenstrualCycleDbHelper.columnMeditationTime:
encryption.encrypt(userSymptomLog.meditationTime ?? ""),
MenstrualCycleDbHelper.columnSleepTime:
encryption.encrypt(userSymptomLog.sleepTime ?? ""),
MenstrualCycleDbHelper.columnWater:
encryption.encrypt(userSymptomLog.waterValue ?? ""),
MenstrualCycleDbHelper.columnWaterUnit:
encryption.encrypt(userSymptomLog.waterUnit ?? ""),
MenstrualCycleDbHelper.columnBodyTemperatureUnit:
encryption.encrypt(userSymptomLog.bodyTemperatureUnit ?? ""),
MenstrualCycleDbHelper.columnWeightUnit:
encryption.encrypt(userSymptomLog.weightUnit ?? ""),
MenstrualCycleDbHelper.columnNotes:
encryption.encrypt(userSymptomLog.notes ?? ""),
MenstrualCycleDbHelper.columnWeight:
encryption.encrypt(userSymptomLog.weight ?? ""),
MenstrualCycleDbHelper.columnBodyTemperature:
encryption.encrypt(userSymptomLog.bodyTemperature ?? ""),
MenstrualCycleDbHelper.columnLogDate: userSymptomLog.logDate,
MenstrualCycleDbHelper.columnCycleDay: userSymptomLog.cycleDay,
MenstrualCycleDbHelper.columnCreatedDateTime:
userSymptomLog.createdDate,
MenstrualCycleDbHelper.columnIsCustomLog: userSymptomLog.isCustomLog
};
await dbHelper.insertDailyLog(
userData, userSymptomLog.logDate ?? "", customerId);
}
}
// Restore Period Logs Data
List<dynamic> periodLogsData = decryptData["allTableData"]
[MenstrualCycleDbHelper.tableUserPeriodsLogsData] ??
[];
if (periodLogsData.isNotEmpty) {
dbHelper.clearPeriodLog(customerId);
await dbHelper.insertOrUpdatePeriodLog(periodLogsData);
}
// Restore Cycle Length and Period Duration
int cycleLength = decryptData["cycleLength"] ?? 28;
int periodDuration = decryptData["periodDuration"] ?? 5;
// Update cycle and period details
await dbHelper.insertCurrentUserDetails(
cycleLength: cycleLength,
periodDuration: periodDuration,
customerId: customerId);
return false;
}