feat: refactor createDatabase method to remove databaseNodeId parameter and implement findOptimalNode in DatabaseNodeService for improved database node selection

This commit is contained in:
lborv
2025-10-09 19:40:52 +03:00
parent e89af0dd20
commit c3189bb2df
3 changed files with 21 additions and 11 deletions

View File

@ -14,11 +14,8 @@ export class DatabaseManagerController {
) {}
@Post("create")
createDatabase(@Body() body: { projectId: string; databaseNodeId: string }) {
return this.databaseManagerService.createDatabase(
body.databaseNodeId,
body.projectId
);
createDatabase(@Body() body: { projectId: string }) {
return this.databaseManagerService.createDatabase(body.projectId);
}
@Post("node/create")

View File

@ -84,11 +84,8 @@ export class DatabaseManagerService extends DatabaseEncryptionService {
};
}
async createDatabase(
databaseNodeId: string,
projectId: string
): Promise<Database> {
const node = await this.databaseNodeService.findById(databaseNodeId);
async createDatabase(projectId: string): Promise<Database> {
const node = await this.databaseNodeService.findOptimalNode();
if (!node) {
throw new Error("Database node not found");
@ -114,7 +111,7 @@ export class DatabaseManagerService extends DatabaseEncryptionService {
q_username,
password: this.decryptPassword(password),
},
databaseNodeId
node.id
);
const database = this.databaseRepository.create({

View File

@ -18,6 +18,22 @@ export class DatabaseNodeService extends DatabaseEncryptionService {
return this.databaseNodeRepository.findOne({ where: { id } });
}
async findOptimalNode(): Promise<DatabaseNode | null> {
const nodes = await this.databaseNodeRepository.find({
relations: ["databases"],
});
if (nodes.length === 0) {
return null;
}
return nodes.reduce((optimalNode, currentNode) => {
const currentCount = currentNode.databases?.length || 0;
const optimalCount = optimalNode.databases?.length || 0;
return currentCount < optimalCount ? currentNode : optimalNode;
});
}
async initDatabase(
data: {
database: string;