feat: create RedisNode migration and update Project and RedisNode entities to use JoinTable for many-to-many relationship

This commit is contained in:
lborv
2025-10-09 19:57:17 +03:00
parent 174dbbcdba
commit 45db65cec8
3 changed files with 59 additions and 3 deletions

View File

@ -0,0 +1,55 @@
import { MigrationInterface, QueryRunner } from "typeorm";
export class RedisNode1760028994511 implements MigrationInterface {
name = "RedisNode1760028994511";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE \`project_redis_nodes_redis_node\` (\`projectId\` varchar(36) NOT NULL, \`redisNodeId\` varchar(36) NOT NULL, INDEX \`IDX_1b5acdd3dc2843538be4a7589d\` (\`projectId\`), INDEX \`IDX_71d51ca25e0ff1c17926fc1676\` (\`redisNodeId\`), PRIMARY KEY (\`projectId\`, \`redisNodeId\`)) ENGINE=InnoDB`
);
await queryRunner.query(
`CREATE TABLE \`redis_node_projects_project\` (\`redisNodeId\` varchar(36) NOT NULL, \`projectId\` varchar(36) NOT NULL, INDEX \`IDX_ebe30bc9d29b5ce861f487dc95\` (\`redisNodeId\`), INDEX \`IDX_34313ecc91fa7073bd82a86011\` (\`projectId\`), PRIMARY KEY (\`redisNodeId\`, \`projectId\`)) ENGINE=InnoDB`
);
await queryRunner.query(
`ALTER TABLE \`project_redis_nodes_redis_node\` ADD CONSTRAINT \`FK_1b5acdd3dc2843538be4a7589d4\` FOREIGN KEY (\`projectId\`) REFERENCES \`project\`(\`id\`) ON DELETE CASCADE ON UPDATE CASCADE`
);
await queryRunner.query(
`ALTER TABLE \`project_redis_nodes_redis_node\` ADD CONSTRAINT \`FK_71d51ca25e0ff1c17926fc16762\` FOREIGN KEY (\`redisNodeId\`) REFERENCES \`redisNode\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`
);
await queryRunner.query(
`ALTER TABLE \`redis_node_projects_project\` ADD CONSTRAINT \`FK_ebe30bc9d29b5ce861f487dc950\` FOREIGN KEY (\`redisNodeId\`) REFERENCES \`redisNode\`(\`id\`) ON DELETE CASCADE ON UPDATE CASCADE`
);
await queryRunner.query(
`ALTER TABLE \`redis_node_projects_project\` ADD CONSTRAINT \`FK_34313ecc91fa7073bd82a86011d\` FOREIGN KEY (\`projectId\`) REFERENCES \`project\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE \`redis_node_projects_project\` DROP FOREIGN KEY \`FK_34313ecc91fa7073bd82a86011d\``
);
await queryRunner.query(
`ALTER TABLE \`redis_node_projects_project\` DROP FOREIGN KEY \`FK_ebe30bc9d29b5ce861f487dc950\``
);
await queryRunner.query(
`ALTER TABLE \`project_redis_nodes_redis_node\` DROP FOREIGN KEY \`FK_71d51ca25e0ff1c17926fc16762\``
);
await queryRunner.query(
`ALTER TABLE \`project_redis_nodes_redis_node\` DROP FOREIGN KEY \`FK_1b5acdd3dc2843538be4a7589d4\``
);
await queryRunner.query(
`DROP INDEX \`IDX_34313ecc91fa7073bd82a86011\` ON \`redis_node_projects_project\``
);
await queryRunner.query(
`DROP INDEX \`IDX_ebe30bc9d29b5ce861f487dc95\` ON \`redis_node_projects_project\``
);
await queryRunner.query(`DROP TABLE \`redis_node_projects_project\``);
await queryRunner.query(
`DROP INDEX \`IDX_71d51ca25e0ff1c17926fc1676\` ON \`project_redis_nodes_redis_node\``
);
await queryRunner.query(
`DROP INDEX \`IDX_1b5acdd3dc2843538be4a7589d\` ON \`project_redis_nodes_redis_node\``
);
await queryRunner.query(`DROP TABLE \`project_redis_nodes_redis_node\``);
}
}

View File

@ -4,6 +4,7 @@ import {
Column, Column,
Entity, Entity,
JoinColumn, JoinColumn,
JoinTable,
ManyToMany, ManyToMany,
OneToMany, OneToMany,
OneToOne, OneToOne,
@ -35,6 +36,6 @@ export class Project {
functions: FunctionEntity[]; functions: FunctionEntity[];
@ManyToMany(() => RedisNode, (redisNode) => redisNode.projects) @ManyToMany(() => RedisNode, (redisNode) => redisNode.projects)
@JoinColumn() @JoinTable()
redisNodes: RedisNode[]; redisNodes: RedisNode[];
} }

View File

@ -2,7 +2,7 @@ import { Project } from "../../project/entities/project.entity";
import { import {
Column, Column,
Entity, Entity,
JoinColumn, JoinTable,
ManyToMany, ManyToMany,
PrimaryGeneratedColumn, PrimaryGeneratedColumn,
} from "typeorm"; } from "typeorm";
@ -25,6 +25,6 @@ export class RedisNode {
password: string | null; password: string | null;
@ManyToMany(() => Project, (project) => project.redisNodes) @ManyToMany(() => Project, (project) => project.redisNodes)
@JoinColumn() @JoinTable()
projects: Project[]; projects: Project[];
} }