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');
}