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