diff --git a/packages/api/src/controllers/archive.js b/packages/api/src/controllers/archive.js index 6562076d6..39506a663 100644 --- a/packages/api/src/controllers/archive.js +++ b/packages/api/src/controllers/archive.js @@ -95,4 +95,13 @@ module.exports = { }); }); }, + + async getNewArchiveFolder({ database }) { + if (!(await fs.exists(path.join(archivedir(), database)))) return database; + let index = 2; + while (await fs.exists(path.join(archivedir(), `${database}${index}`))) { + index += 1; + } + return `${database}${index}`; + }, }; diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js index de8a7bcf7..15aa3e3b4 100644 --- a/packages/api/src/controllers/databaseConnections.js +++ b/packages/api/src/controllers/databaseConnections.js @@ -1,5 +1,6 @@ const uuidv1 = require('uuid/v1'); const connections = require('./connections'); +const archive = require('./archive'); const socket = require('../utility/socket'); const { fork } = require('child_process'); const { DatabaseAnalyser } = require('dbgate-tools'); @@ -238,6 +239,12 @@ module.exports = { return res; }, + exportModel_meta: 'post', + async exportModel({ conid, database }) { + const archiveFolder = await archive.getNewArchiveFolder({ database }); + return { archiveFolder }; + }, + // runCommand_meta: 'post', // async runCommand({ conid, database, sql }) { // console.log(`Running SQL command , conid=${conid}, database=${database}, sql=${sql}`); diff --git a/packages/web/src/appobj/DatabaseAppObject.svelte b/packages/web/src/appobj/DatabaseAppObject.svelte index f275c5987..a72a3623c 100644 --- a/packages/web/src/appobj/DatabaseAppObject.svelte +++ b/packages/web/src/appobj/DatabaseAppObject.svelte @@ -53,11 +53,20 @@ currentDatabase.set(null); }; + const handleExportModel = async () => { + const resp = await axiosInstance.post('database-connections/export-model', { + conid: connection._id, + database: name, + }); + showSnackbarSuccess(`Saved to archive ${resp.data.archiveFolder}`); + }; + return [ { onClick: handleNewQuery, text: 'New query', isNewQuery: true }, { onClick: handleImport, text: 'Import' }, { onClick: handleExport, text: 'Export' }, { onClick: handleSqlGenerator, text: 'SQL Generator' }, + { onClick: handleExportModel, text: 'Export DB model' }, _.get($currentDatabase, 'connection._id') == _.get(connection, '_id') && _.get($currentDatabase, 'name') == name && { onClick: handleDisconnect, text: 'Disconnect' }, @@ -78,6 +87,7 @@ import getElectron from '../utility/getElectron'; import openNewTab from '../utility/openNewTab'; import AppObjectCore from './AppObjectCore.svelte'; + import { showSnackbarSuccess } from '../utility/snackbar'; export let data; function createMenu() {