app commands works

This commit is contained in:
Jan Prochazka
2022-01-27 17:01:58 +01:00
parent 595c9424df
commit a76ba60272
10 changed files with 174 additions and 25 deletions

View File

@@ -1,7 +1,9 @@
const fs = require('fs-extra');
const _ = require('lodash');
const path = require('path');
const { appdir } = require('../utility/directories');
const socket = require('../utility/socket');
const connections = require('./connections');
module.exports = {
folders_meta: true,
@@ -50,6 +52,16 @@ module.exports = {
return [...refsType(), ...fileType('.command.sql', 'command.sql'), ...fileType('.query.sql', 'query.sql')];
},
async emitChangedDbApp(folder) {
for (const conn of await connections.list()) {
for (const db of conn.databases || []) {
if (db[`useApp:${folder}`]) {
socket.emitChanged(`db-apps-changed-${conn._id}-${db.name}`);
}
}
}
},
refreshFiles_meta: true,
async refreshFiles({ folder }) {
socket.emitChanged(`app-files-changed-${folder}`);
@@ -64,6 +76,7 @@ module.exports = {
async deleteFile({ folder, file, fileType }) {
await fs.unlink(path.join(appdir(), folder, `${file}.${fileType}`));
socket.emitChanged(`app-files-changed-${folder}`);
this.emitChangedDbApp(folder);
},
renameFile_meta: true,
@@ -73,6 +86,7 @@ module.exports = {
path.join(path.join(appdir(), folder), `${newFile}.${fileType}`)
);
socket.emitChanged(`app-files-changed-${folder}`);
this.emitChangedDbApp(folder);
},
renameFolder_meta: true,
@@ -97,4 +111,54 @@ module.exports = {
}
return `${name}${index}`;
},
getAppsForDb_meta: true,
async getAppsForDb({ conid, database }) {
const connection = await connections.get({ conid });
if (!connection) return [];
const db = (connection.databases || []).find(x => x.name == database);
const apps = [];
const res = [];
if (db) {
for (const key of _.keys(db || {})) {
if (key.startsWith('useApp:') && db[key]) {
apps.push(key.substring('useApp:'.length));
}
}
}
console.log('APPS', apps);
for (const folder of apps) {
res.push(await this.loadApp({ folder }));
}
return res;
},
loadApp_meta: true,
async loadApp({ folder }) {
const res = {
queries: [],
commands: [],
name: folder,
};
const dir = path.join(appdir(), folder);
if (await fs.exists(dir)) {
const files = await fs.readdir(dir);
async function processType(ext, field) {
for (const file of files) {
if (file.endsWith(ext)) {
res[field].push({
name: file.slice(0, -ext.length),
sql: await fs.readFile(path.join(dir, file), { encoding: 'utf-8' }),
});
}
}
}
await processType('.command.sql', 'commands');
await processType('.query.sql', 'queries');
}
return res;
},
};