Skip to content

Commit 12df380

Browse files
committed
chore: add migrations for view changes
1 parent 5e71002 commit 12df380

1 file changed

Lines changed: 97 additions & 0 deletions

File tree

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import { MigrationInterface, QueryRunner } from 'typeorm';
2+
3+
export class SyncViews1765801458354 implements MigrationInterface {
4+
name = 'SyncViews1765801458354';
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(
8+
`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`,
9+
['VIEW', 'project_access_view_entity', 'public'],
10+
);
11+
await queryRunner.query(`DROP VIEW "project_access_view_entity"`);
12+
await queryRunner.query(
13+
`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`,
14+
['VIEW', 'mission_access_view_entity', 'public'],
15+
);
16+
await queryRunner.query(`DROP VIEW "mission_access_view_entity"`);
17+
await queryRunner.query(`CREATE VIEW "project_access_view_entity" AS
18+
SELECT
19+
"project"."uuid" AS "projectuuid",
20+
"user"."uuid" AS "useruuid",
21+
MAX("projectAccesses"."rights") AS "rights"
22+
FROM "project" "project"
23+
INNER JOIN "project_access" "projectAccesses" ON "projectAccesses"."projectUuid" = "project"."uuid"
24+
INNER JOIN "access_group" "accessGroup" ON "accessGroup"."uuid" = "projectAccesses"."accessGroupUuid"
25+
INNER JOIN "group_membership" "memberships" ON "memberships"."accessGroupUuid" = "accessGroup"."uuid" AND ("memberships"."expirationDate" IS NULL OR "memberships"."expirationDate" > NOW())
26+
INNER JOIN "user" "user" ON "user"."uuid" = "memberships"."userUuid"
27+
GROUP BY "project"."uuid", "user"."uuid"
28+
`);
29+
await queryRunner.query(
30+
`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`,
31+
[
32+
'public',
33+
'VIEW',
34+
'project_access_view_entity',
35+
'SELECT\n "project"."uuid" AS "projectuuid",\n "user"."uuid" AS "useruuid",\n MAX("projectAccesses"."rights") AS "rights"\n FROM "project" "project"\n INNER JOIN "project_access" "projectAccesses" ON "projectAccesses"."projectUuid" = "project"."uuid"\n INNER JOIN "access_group" "accessGroup" ON "accessGroup"."uuid" = "projectAccesses"."accessGroupUuid"\n INNER JOIN "group_membership" "memberships" ON "memberships"."accessGroupUuid" = "accessGroup"."uuid" AND ("memberships"."expirationDate" IS NULL OR "memberships"."expirationDate" > NOW())\n INNER JOIN "user" "user" ON "user"."uuid" = "memberships"."userUuid"\n GROUP BY "project"."uuid", "user"."uuid"',
36+
],
37+
);
38+
await queryRunner.query(`CREATE VIEW "mission_access_view_entity" AS
39+
SELECT
40+
"mission"."uuid" AS "missionuuid",
41+
"user"."uuid" AS "useruuid",
42+
MAX("missionAccesses"."rights") AS "rights"
43+
FROM "mission" "mission"
44+
INNER JOIN "mission_access" "missionAccesses" ON "missionAccesses"."missionUuid" = "mission"."uuid"
45+
INNER JOIN "access_group" "accessGroup" ON "accessGroup"."uuid" = "missionAccesses"."accessGroupUuid"
46+
INNER JOIN "group_membership" "memberships" ON "memberships"."accessGroupUuid" = "accessGroup"."uuid"
47+
INNER JOIN "user" "user" ON "user"."uuid" = "memberships"."userUuid"
48+
GROUP BY "mission"."uuid", "user"."uuid"
49+
`);
50+
await queryRunner.query(
51+
`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`,
52+
[
53+
'public',
54+
'VIEW',
55+
'mission_access_view_entity',
56+
'SELECT\n "mission"."uuid" AS "missionuuid",\n "user"."uuid" AS "useruuid",\n MAX("missionAccesses"."rights") AS "rights"\n FROM "mission" "mission"\n INNER JOIN "mission_access" "missionAccesses" ON "missionAccesses"."missionUuid" = "mission"."uuid"\n INNER JOIN "access_group" "accessGroup" ON "accessGroup"."uuid" = "missionAccesses"."accessGroupUuid"\n INNER JOIN "group_membership" "memberships" ON "memberships"."accessGroupUuid" = "accessGroup"."uuid"\n INNER JOIN "user" "user" ON "user"."uuid" = "memberships"."userUuid"\n GROUP BY "mission"."uuid", "user"."uuid"',
57+
],
58+
);
59+
}
60+
61+
public async down(queryRunner: QueryRunner): Promise<void> {
62+
await queryRunner.query(
63+
`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`,
64+
['VIEW', 'mission_access_view_entity', 'public'],
65+
);
66+
await queryRunner.query(`DROP VIEW "mission_access_view_entity"`);
67+
await queryRunner.query(
68+
`DELETE FROM "typeorm_metadata" WHERE "type" = $1 AND "name" = $2 AND "schema" = $3`,
69+
['VIEW', 'project_access_view_entity', 'public'],
70+
);
71+
await queryRunner.query(`DROP VIEW "project_access_view_entity"`);
72+
await queryRunner.query(
73+
`CREATE VIEW "mission_access_view_entity" AS SELECT "mission"."uuid" as missionUUID, "user"."uuid" as userUUID, MAX("missionAccesses"."rights") as rights FROM "mission" "mission" INNER JOIN "mission_access" "missionAccesses" ON "missionAccesses"."missionUuid"="mission"."uuid" AND ("missionAccesses"."deletedAt" IS NULL) INNER JOIN "access_group" "accessGroup" ON "accessGroup"."uuid"="missionAccesses"."accessGroupUuid" AND ("accessGroup"."deletedAt" IS NULL) INNER JOIN "group_membership" "memberships" ON "memberships"."accessGroupUuid"="accessGroup"."uuid" AND ("memberships"."deletedAt" IS NULL) INNER JOIN "user" "user" ON "user"."uuid"="memberships"."userUuid" AND ("user"."deletedAt" IS NULL) WHERE "mission"."deletedAt" IS NULL GROUP BY "mission"."uuid", "user"."uuid"`,
74+
);
75+
await queryRunner.query(
76+
`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`,
77+
[
78+
'public',
79+
'VIEW',
80+
'mission_access_view_entity',
81+
'SELECT "mission"."uuid" as missionUUID, "user"."uuid" as userUUID, MAX("missionAccesses"."rights") as rights FROM "mission" "mission" INNER JOIN "mission_access" "missionAccesses" ON "missionAccesses"."missionUuid"="mission"."uuid" AND ("missionAccesses"."deletedAt" IS NULL) INNER JOIN "access_group" "accessGroup" ON "accessGroup"."uuid"="missionAccesses"."accessGroupUuid" AND ("accessGroup"."deletedAt" IS NULL) INNER JOIN "group_membership" "memberships" ON "memberships"."accessGroupUuid"="accessGroup"."uuid" AND ("memberships"."deletedAt" IS NULL) INNER JOIN "user" "user" ON "user"."uuid"="memberships"."userUuid" AND ("user"."deletedAt" IS NULL) WHERE "mission"."deletedAt" IS NULL GROUP BY "mission"."uuid", "user"."uuid"',
82+
],
83+
);
84+
await queryRunner.query(
85+
`CREATE VIEW "project_access_view_entity" AS SELECT "project"."uuid" as projectUUID, "user"."uuid" as userUUID, MAX("projectAccesses"."rights") as rights FROM "project" "project" INNER JOIN "project_access" "projectAccesses" ON "projectAccesses"."projectUuid"="project"."uuid" AND ("projectAccesses"."deletedAt" IS NULL) INNER JOIN "access_group" "accessGroup" ON "accessGroup"."uuid"="projectAccesses"."accessGroupUuid" AND ("accessGroup"."deletedAt" IS NULL) INNER JOIN "group_membership" "memberships" ON "memberships"."accessGroupUuid"="accessGroup"."uuid" AND ( "memberships"."expirationDate" IS NULL OR "memberships"."expirationDate" > NOW() AND "memberships"."deletedAt" IS NULL) INNER JOIN "user" "user" ON "user"."uuid"="memberships"."userUuid" AND ("user"."deletedAt" IS NULL) WHERE "project"."deletedAt" IS NULL GROUP BY "project"."uuid", "user"."uuid"`,
86+
);
87+
await queryRunner.query(
88+
`INSERT INTO "typeorm_metadata"("database", "schema", "table", "type", "name", "value") VALUES (DEFAULT, $1, DEFAULT, $2, $3, $4)`,
89+
[
90+
'public',
91+
'VIEW',
92+
'project_access_view_entity',
93+
'SELECT "project"."uuid" as projectUUID, "user"."uuid" as userUUID, MAX("projectAccesses"."rights") as rights FROM "project" "project" INNER JOIN "project_access" "projectAccesses" ON "projectAccesses"."projectUuid"="project"."uuid" AND ("projectAccesses"."deletedAt" IS NULL) INNER JOIN "access_group" "accessGroup" ON "accessGroup"."uuid"="projectAccesses"."accessGroupUuid" AND ("accessGroup"."deletedAt" IS NULL) INNER JOIN "group_membership" "memberships" ON "memberships"."accessGroupUuid"="accessGroup"."uuid" AND ( "memberships"."expirationDate" IS NULL OR "memberships"."expirationDate" > NOW() AND "memberships"."deletedAt" IS NULL) INNER JOIN "user" "user" ON "user"."uuid"="memberships"."userUuid" AND ("user"."deletedAt" IS NULL) WHERE "project"."deletedAt" IS NULL GROUP BY "project"."uuid", "user"."uuid"',
94+
],
95+
);
96+
}
97+
}

0 commit comments

Comments
 (0)