|
| 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