feat: enhance query handling with modules and plugins
- Added ManyToMany relationship for plugins in Query entity. - Updated QueryExecuterController to accept structured query data. - Enhanced QueryExecuterService to support plugin initialization and execution. - Implemented QueryHandlerService methods for creating and updating queries, modules, and plugins. - Introduced new endpoints for creating and adding modules and plugins to queries. - Created Plugin base class and DatabasePlugin implementation for database interactions. - Updated VM class to integrate plugin functionality during script execution. - Added test cases for project, query, module, and plugin operations.
This commit is contained in:
45
src/vm/plugins/database.plugin.ts
Normal file
45
src/vm/plugins/database.plugin.ts
Normal file
@ -0,0 +1,45 @@
|
||||
import { Plugin } from "../plugin.class";
|
||||
import * as mysql from "mysql2/promise";
|
||||
|
||||
export class DatabasePlugin extends Plugin {
|
||||
constructor(name: string, private dbConnection: any) {
|
||||
if (!dbConnection || typeof dbConnection.execute !== "function") {
|
||||
throw new Error(
|
||||
"Invalid database connection: must be a mysql2 connection with execute method"
|
||||
);
|
||||
}
|
||||
|
||||
super(name);
|
||||
}
|
||||
|
||||
static init(
|
||||
name: string,
|
||||
config: {
|
||||
host: string;
|
||||
user: string;
|
||||
password: string;
|
||||
database: string;
|
||||
}
|
||||
): DatabasePlugin {
|
||||
const dbConnection = mysql.createConnection({
|
||||
host: config.host,
|
||||
user: config.user,
|
||||
password: config.password,
|
||||
database: config.database,
|
||||
});
|
||||
|
||||
return new DatabasePlugin(name, dbConnection);
|
||||
}
|
||||
|
||||
async run(query): Promise<{
|
||||
rows: any[];
|
||||
fields: any[];
|
||||
}> {
|
||||
const [rows, fields] = await this.dbConnection.execute(query);
|
||||
return { rows, fields };
|
||||
}
|
||||
|
||||
onFinish() {
|
||||
this.dbConnection.end();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user