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:
lborv
2025-09-21 01:07:51 +03:00
parent d90c85d66f
commit 8eba1d1344
26 changed files with 620 additions and 25 deletions

View 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();
}
}