new(all): WebDav support for all bots.
This commit is contained in:
parent
7e1fda84bb
commit
009263d309
1 changed files with 65 additions and 67 deletions
|
@ -221,9 +221,7 @@ export class GBVMService extends GBService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async loadConnections(min) {
|
public static async loadConnections(min) {
|
||||||
|
|
||||||
|
|
||||||
// Loads storage custom connections.
|
// Loads storage custom connections.
|
||||||
const path = DialogKeywords.getGBAIPath(min.botId, null);
|
const path = DialogKeywords.getGBAIPath(min.botId, null);
|
||||||
const filePath = Path.join('work', path, 'connections.json');
|
const filePath = Path.join('work', path, 'connections.json');
|
||||||
|
@ -368,83 +366,83 @@ export class GBVMService extends GBService {
|
||||||
let con = min[connectionName];
|
let con = min[connectionName];
|
||||||
|
|
||||||
if (!con) {
|
if (!con) {
|
||||||
throw new Error(`Invalid connection specified: ${connectionName}.`);
|
GBLogEx.debug(min, `Invalid connection specified: ${min.bot} ${tableName} ${connectionName}.`);
|
||||||
}
|
} else {
|
||||||
|
// Field checking, syncs if there is any difference.
|
||||||
|
const seq = con ? con : minBoot.core.sequelize;
|
||||||
|
|
||||||
// Field checking, syncs if there is any difference.
|
if (seq) {
|
||||||
const seq = con ? con : minBoot.core.sequelize;
|
const model = seq.models[tableName];
|
||||||
|
if (model) {
|
||||||
|
// Except Id, checks if has same number of fields.
|
||||||
|
let equals = 0;
|
||||||
|
Object.keys(t.fields).forEach(key => {
|
||||||
|
let obj1 = t.fields[key];
|
||||||
|
let obj2 = model['fieldRawAttributesMap'][key];
|
||||||
|
|
||||||
if (seq) {
|
if (key !== 'id') {
|
||||||
const model = seq.models[tableName];
|
if (obj1 && obj2) {
|
||||||
if (model) {
|
equals++;
|
||||||
// Except Id, checks if has same number of fields.
|
}
|
||||||
let equals = 0;
|
|
||||||
Object.keys(t.fields).forEach(key => {
|
|
||||||
let obj1 = t.fields[key];
|
|
||||||
let obj2 = model['fieldRawAttributesMap'][key];
|
|
||||||
|
|
||||||
if (key !== 'id') {
|
|
||||||
if (obj1 && obj2) {
|
|
||||||
equals++;
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (equals != Object.keys(t.fields).length) {
|
||||||
|
sync = true;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
if (equals != Object.keys(t.fields).length) {
|
|
||||||
sync = true;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
seq.define(tableName, t.fields);
|
seq.define(tableName, t.fields);
|
||||||
|
|
||||||
// New table checking, if needs sync.
|
// New table checking, if needs sync.
|
||||||
let tables;
|
let tables;
|
||||||
const dialect = con.dialect.name;
|
const dialect = con.dialect.name;
|
||||||
|
|
||||||
if (dialect === 'mssql') {
|
if (dialect === 'mssql') {
|
||||||
tables = await seq.query(
|
tables = await seq.query(
|
||||||
`SELECT table_name, table_schema
|
`SELECT table_name, table_schema
|
||||||
FROM information_schema.tables
|
FROM information_schema.tables
|
||||||
WHERE table_type = 'BASE TABLE'
|
WHERE table_type = 'BASE TABLE'
|
||||||
ORDER BY table_name ASC`,
|
ORDER BY table_name ASC`,
|
||||||
{
|
{
|
||||||
type: QueryTypes.RAW
|
type: QueryTypes.RAW
|
||||||
|
}
|
||||||
|
)[0];
|
||||||
|
} else if (dialect === 'mariadb') {
|
||||||
|
tables = await seq.getQueryInterface().showAllTables();
|
||||||
|
}
|
||||||
|
|
||||||
|
let found = false;
|
||||||
|
tables.forEach(storageTable => {
|
||||||
|
if (storageTable['table_name'] === tableName) {
|
||||||
|
found = true;
|
||||||
}
|
}
|
||||||
)[0];
|
|
||||||
} else if (dialect === 'mariadb') {
|
|
||||||
tables = await seq.getQueryInterface().showAllTables();
|
|
||||||
}
|
|
||||||
|
|
||||||
let found = false;
|
|
||||||
tables.forEach(storageTable => {
|
|
||||||
if (storageTable['table_name'] === tableName) {
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
sync = sync ? sync : !found;
|
|
||||||
|
|
||||||
associations.forEach(e => {
|
|
||||||
const from = seq.models[e.from];
|
|
||||||
const to = seq.models[e.to];
|
|
||||||
|
|
||||||
try {
|
|
||||||
to.hasMany(from);
|
|
||||||
} catch (error) {
|
|
||||||
throw new Error(
|
|
||||||
`Invalid relationship in ${mainName}: from ${e.from} to ${e.to} (${min.botId})... ${error.message}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (sync && shouldSync) {
|
|
||||||
GBLogEx.info(min, `Syncing changes for TABLE ${connectionName} ${tableName} keyword (${min.botId})...`);
|
|
||||||
|
|
||||||
await seq.sync({
|
|
||||||
alter: true,
|
|
||||||
force: false // Keep it false due to data loss danger.
|
|
||||||
});
|
});
|
||||||
GBLogEx.info(min, `Done sync for ${min.botId} ${connectionName} ${tableName} storage table...`);
|
|
||||||
|
sync = sync ? sync : !found;
|
||||||
|
|
||||||
|
associations.forEach(e => {
|
||||||
|
const from = seq.models[e.from];
|
||||||
|
const to = seq.models[e.to];
|
||||||
|
|
||||||
|
try {
|
||||||
|
to.hasMany(from);
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid relationship in ${mainName}: from ${e.from} to ${e.to} (${min.botId})... ${error.message}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (sync && shouldSync) {
|
||||||
|
GBLogEx.info(min, `Syncing changes for TABLE ${connectionName} ${tableName} keyword (${min.botId})...`);
|
||||||
|
|
||||||
|
await seq.sync({
|
||||||
|
alter: true,
|
||||||
|
force: false // Keep it false due to data loss danger.
|
||||||
|
});
|
||||||
|
GBLogEx.info(min, `Done sync for ${min.botId} ${connectionName} ${tableName} storage table...`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue