import { MigrationInterface, QueryRunner } from 'typeorm';

export class fixMissingProjectIdFk1713206670960 implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `alter table app_tokens
            add constraint app_tokens_projects_id_fk
                foreign key (project_id) references projects
                    on update cascade on delete cascade;
        `,
    );
    await queryRunner.query(
      `alter table asset_references
            add constraint asset_references_projects_id_fk
                foreign key (project_id) references projects
                    on update cascade on delete cascade;
        `,
    );
    await queryRunner.query(
      `alter table asset_rights
            add constraint asset_rights_projects_id_fk
                foreign key (project_id) references projects
                    on update cascade on delete cascade;
        `,
    );
    await queryRunner.query(
      `alter table asset_user_rights
            add constraint asset_user_rights_projects_id_fk
                foreign key (project_id) references projects
                    on update cascade on delete cascade;
        `,
    );
    await queryRunner.query(
      `alter table event_actions
            add constraint event_actions_projects_id_fk
                foreign key (project_id) references projects
                    on update cascade on delete cascade;
        `,
    );
    await queryRunner.query(
      `alter table event_triggers
            add constraint event_triggers_projects_id_fk
                foreign key (project_id) references projects
                    on update cascade on delete cascade;
        `,
    );
    await queryRunner.query(
      `alter table event_webhook_logs
            add constraint event_webhook_logs_projects_id_fk
                foreign key (project_id) references projects
                    on update cascade on delete cascade;
        `,
    );

    await queryRunner.query(
      `alter table project_actions
              add constraint project_actions_projects_id_fk
                  foreign key (project_id) references projects
                      on update cascade on delete cascade;
          `,
    );
    await queryRunner.query(
      `alter table scope_rights
                add constraint scope_rights_projects_id_fk
                    foreign key (project_id) references projects
                        on update cascade on delete cascade;
            `,
    );
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`
        alter table asset_references
        drop constraint asset_references_projects_id_fk;
    `);
    await queryRunner.query(`
        alter table app_tokens
        drop constraint app_tokens_projects_id_fk;
    `);
    await queryRunner.query(`
        alter table asset_rights
        drop constraint asset_rights_projects_id_fk;
    `);
    await queryRunner.query(`
        alter table asset_user_rights
        drop constraint asset_user_rights_projects_id_fk;
    `);
    await queryRunner.query(`
        alter table event_actions
        drop constraint event_actions_projects_id_fk;
    `);
    await queryRunner.query(`
        alter table event_triggers
        drop constraint event_triggers_projects_id_fk;
    `);
    await queryRunner.query(`
        alter table event_webhook_logs
        drop constraint event_webhook_logs_projects_id_fk;
    `);
    await queryRunner.query(`
        alter table project_actions
        drop constraint project_actions_projects_id_fk;
    `);
    await queryRunner.query(`
        alter table scope_rights
        drop constraint scope_rights_projects_id_fk;
    `);
  }
}
