dump method
Implementation
Future<APIResponse<Object>> dump(bool zip) async {
if (onlyOnDevelopment && !development) {
return APIResponse.error(error: "Unsupported request!");
}
_log.info("APIDBModule[REQUEST]> dump");
var allRepositories = (await entityRepositoryProviders).allRepositories();
var dump = await allRepositories.values
.map((repo) => MapEntry(repo.name, repo.selectAll()))
.toMapFromEntries()
.resolveAllValues();
var dumpJson = dump.entries
.map((e) => MapEntry(e.key, _entitiesToJsonMap(e.value)))
.where((e) => e.value.isNotEmpty)
.toMapFromEntries();
if (zip) {
var apiName =
apiRoot.name.toLowerCase().trim().replaceAll(RegExp(r'\W+'), '_');
var zipTime = DateTime.now().millisecondsSinceEpoch;
var zipName = 'db-dump--$apiName--$zipTime';
var archive = Archive();
{
var dumpJsonBytes = Json.encodeToBytes(dumpJson);
var archiveFile = ArchiveFile(
'$zipName/dump.json', dumpJsonBytes.length, dumpJsonBytes);
archive.addFile(archiveFile);
}
var zipEncoder = ZipEncoder();
var encode = zipEncoder.encode(archive)!;
var zipData = encode is Uint8List ? encode : Uint8List.fromList(encode);
var zipFileName = '$zipName.zip';
return APIResponse.ok(zipData, mimeType: 'application/zip', headers: {
'Content-Disposition': 'attachment; filename="$zipFileName"'
});
}
return APIResponse.ok(dumpJson, mimeType: 'json');
}