update mongo data

This commit is contained in:
Jan Prochazka
2021-04-05 15:09:03 +02:00
parent 6c2ee5ffdb
commit ccb1c26905
5 changed files with 70 additions and 9 deletions

View File

@@ -99,6 +99,13 @@ module.exports = {
return res.result;
},
updateCollection_meta: 'post',
async updateCollection({ conid, database, changeSet }) {
const opened = await this.ensureOpened(conid, database);
const res = await this.sendRequest(opened, { msgtype: 'updateCollection', changeSet });
return res.result;
},
status_meta: 'get',
async status({ conid, database }) {
const existing = this.opened.find(x => x.conid == conid && x.database == database);

View File

@@ -105,6 +105,17 @@ async function handleCollectionData({ msgid, options }) {
}
}
async function handleUpdateCollection({ msgid, changeSet }) {
await waitConnected();
const driver = requireEngineDriver(storedConnection);
try {
const result = await driver.updateCollection(systemConnection, changeSet);
process.send({ msgtype: 'response', msgid, result });
} catch (err) {
process.send({ msgtype: 'response', msgid, errorMessage: err.message });
}
}
async function handleSqlPreview({ msgid, objects, options }) {
await waitConnected();
const driver = requireEngineDriver(storedConnection);
@@ -140,6 +151,7 @@ function handlePing() {
const messageHandlers = {
connect: handleConnect,
queryData: handleQueryData,
updateCollection: handleUpdateCollection,
collectionData: handleCollectionData,
sqlPreview: handleSqlPreview,
ping: handlePing,

View File

@@ -61,6 +61,7 @@ export interface EngineDriver {
createDumper(): SqlDumper;
getAuthTypes(): EngineAuthType[];
readCollection(pool: any, options: ReadCollectionOptions): Promise<any>;
updateCollection(pool: any, changeSet: any): Promise<any>;
analyserClass?: any;
dumperClass?: any;

View File

@@ -87,7 +87,7 @@
import { scriptToSql } from 'dbgate-sqltree';
import _ from 'lodash';
import ErrorInfo from '../elements/ErrorInfo.svelte';
import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte';
import ConfirmNoSqlModal from '../modals/ConfirmNoSqlModal.svelte';
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
import ImportExportModal from '../modals/ImportExportModal.svelte';
import { showModal } from '../modals/modalTools';
@@ -128,15 +128,15 @@
// $: console.log('GRIDER', grider);
// $: if (onChangeGrider) onChangeGrider(grider);
async function handleConfirmSql(sql) {
async function handleConfirmChange(changeSet) {
const resp = await axiosInstance.request({
url: 'database-connections/query-data',
url: 'database-connections/update-collection',
method: 'post',
params: {
conid,
database,
},
data: { sql },
data: { changeSet },
});
const { errorMessage } = resp.data || {};
if (errorMessage) {
@@ -148,11 +148,10 @@
}
function handleSave() {
const script = changeSetToSql(changeSetState && changeSetState.value, display.dbinfo);
const sql = scriptToSql(display.driver, script);
showModal(ConfirmSqlModal, {
sql,
onConfirm: () => handleConfirmSql(sql),
const json = changeSetState && changeSetState.value;
showModal(ConfirmNoSqlModal, {
json,
onConfirm: () => handleConfirmChange(json),
engine: display.engine,
});
}

View File

@@ -0,0 +1,42 @@
<script>
import FormStyledButton from '../elements/FormStyledButton.svelte';
import FormProvider from '../forms/FormProvider.svelte';
import FormSubmit from '../forms/FormSubmit.svelte';
import JSONTree from '../jsontree/JSONTree.svelte';
import ModalBase from './ModalBase.svelte';
import { closeCurrentModal } from './modalTools';
export let json;
export let onConfirm;
</script>
<FormProvider>
<ModalBase {...$$restProps}>
<div slot="header">Save changes</div>
<div class="editor">
<JSONTree value={json} />
</div>
<div slot="footer">
<FormSubmit
value="OK"
on:click={() => {
closeCurrentModal();
onConfirm();
}}
/>
<FormStyledButton type="button" value="Close" onClick={closeCurrentModal} />
</div>
</ModalBase>
</FormProvider>
<style>
.editor {
position: relative;
height: 30vh;
width: 40vw;
overflow: scroll;
}
</style>