This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
import { Migration } from '@mikro-orm/migrations';
|
||||
|
||||
export class Migration20260704140000_addCampaignUserGroupsTable extends Migration {
|
||||
|
||||
override async up(): Promise<void> {
|
||||
this.addSql(`
|
||||
create table "campaign_user_groups" (
|
||||
"campaign_id" char(26) not null,
|
||||
"user_group_id" char(26) not null,
|
||||
constraint "campaign_user_groups_pkey" primary key ("campaign_id", "user_group_id")
|
||||
);
|
||||
`);
|
||||
this.addSql(`
|
||||
alter table "campaign_user_groups"
|
||||
add constraint "campaign_user_groups_campaign_id_foreign"
|
||||
foreign key ("campaign_id") references "campaigns" ("id") on update cascade on delete cascade;
|
||||
`);
|
||||
this.addSql(`
|
||||
alter table "campaign_user_groups"
|
||||
add constraint "campaign_user_groups_user_group_id_foreign"
|
||||
foreign key ("user_group_id") references "user_groups" ("id") on update cascade on delete cascade;
|
||||
`);
|
||||
|
||||
this.addSql(`
|
||||
insert into "campaign_user_groups" ("campaign_id", "user_group_id")
|
||||
select c."id", g."id"
|
||||
from "campaigns" c
|
||||
cross join lateral jsonb_array_elements_text(c."groups") as gid("id")
|
||||
inner join "user_groups" g on g."id" = gid."id"
|
||||
on conflict do nothing;
|
||||
`);
|
||||
|
||||
this.addSql(`alter table "campaigns" drop column "groups";`);
|
||||
}
|
||||
|
||||
override async down(): Promise<void> {
|
||||
this.addSql(`alter table "campaigns" add column "groups" jsonb not null default '[]';`);
|
||||
|
||||
this.addSql(`
|
||||
update "campaigns" c
|
||||
set "groups" = coalesce(
|
||||
(
|
||||
select jsonb_agg(cug."user_group_id")
|
||||
from "campaign_user_groups" cug
|
||||
where cug."campaign_id" = c."id"
|
||||
),
|
||||
'[]'::jsonb
|
||||
);
|
||||
`);
|
||||
|
||||
this.addSql(`drop table if exists "campaign_user_groups" cascade;`);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user