Update 20240724101056_access-request-groups.ts

This commit is contained in:
Daniel Hougaard
2024-08-20 19:50:42 +04:00
committed by Daniel Hougaard
parent 1216d218c1
commit b717de4f78
@@ -116,14 +116,17 @@ export async function up(knex: Knex): Promise<void> {
tb.foreign("projectId").references("id").inTable(TableName.Project).onDelete("CASCADE"); tb.foreign("projectId").references("id").inTable(TableName.Project).onDelete("CASCADE");
}); });
await knex.raw(` await knex(TableName.ProjectUserAdditionalPrivilege)
UPDATE ${TableName.ProjectUserAdditionalPrivilege} AS puap .update({
SET // eslint-disable-next-line
"userId" = pm."userId", // @ts-ignore because generate schema happens after this
"projectId" = pm."projectId" userId: knex.ref("pm.userId"),
FROM ${TableName.ProjectMembership} AS pm // eslint-disable-next-line
WHERE puap."projectMembershipId" = pm."id" // @ts-ignore because generate schema happens after this
`); projectId: knex.ref("pm.projectId")
})
.from(`${TableName.ProjectUserAdditionalPrivilege} as puap`)
.join(`${TableName.ProjectMembership} as pm`, "puap.projectMembershipId", "pm.id");
await knex.schema.alterTable(TableName.ProjectUserAdditionalPrivilege, (tb) => { await knex.schema.alterTable(TableName.ProjectUserAdditionalPrivilege, (tb) => {
tb.uuid("userId").notNullable().alter(); tb.uuid("userId").notNullable().alter();
@@ -168,18 +171,25 @@ export async function down(knex: Knex): Promise<void> {
if (!hasProjectMembershipId) { if (!hasProjectMembershipId) {
// First, update records where a matching project membership exists // First, update records where a matching project membership exists
await knex.raw(` await knex(TableName.ProjectUserAdditionalPrivilege).update({
UPDATE ${TableName.ProjectUserAdditionalPrivilege} AS puap // eslint-disable-next-line
SET "projectMembershipId" = pm."id" // @ts-ignore because generate schema happens after this
FROM ${TableName.ProjectMembership} AS pm projectMembershipId: knex(TableName.ProjectMembership)
WHERE puap."userId" = pm."userId" AND puap."projectId" = pm."projectId" .select("id")
`); .where("userId", knex.raw("??", [`${TableName.ProjectUserAdditionalPrivilege}.userId`]))
});
await knex(TableName.AccessApprovalRequest).update({
// eslint-disable-next-line
// @ts-ignore because generate schema happens after this
projectMembershipId: knex(TableName.ProjectMembership)
.select("id")
.where("userId", knex.raw("??", [`${TableName.SecretApprovalRequest}.userId`]))
});
// Then, delete records where no matching project membership was found // Then, delete records where no matching project membership was found
await knex.raw(` await knex(TableName.AccessApprovalRequest).whereNull("projectMembershipId").delete();
DELETE FROM ${TableName.ProjectUserAdditionalPrivilege} await knex(TableName.ProjectUserAdditionalPrivilege).whereNull("projectMembershipId").delete();
WHERE "projectMembershipId" IS NULL
`);
await knex.schema.alterTable(TableName.ProjectUserAdditionalPrivilege, (tb) => { await knex.schema.alterTable(TableName.ProjectUserAdditionalPrivilege, (tb) => {
// DROP AT A LATER TIME // DROP AT A LATER TIME
@@ -238,36 +248,20 @@ export async function down(knex: Knex): Promise<void> {
} }
}); });
// await knex(TableName.AccessApprovalRequest).update({
// // eslint-disable-next-line
// // @ts-ignore because generate schema happens after this
// requestedBy: knex(TableName.ProjectMembership)
// .select("id")
// .where("userId", knex.raw("??", [`${TableName.AccessApprovalRequest}.requestedByUserId`]))
// });
// Try to find a project membership based on the AccessApprovalRequest.requestedByUserId and AccessApprovalRequest.policyId(reference to AccessApprovalRequestPolicy).envId(reference to Environment).projectId(reference to Project) // Try to find a project membership based on the AccessApprovalRequest.requestedByUserId and AccessApprovalRequest.policyId(reference to AccessApprovalRequestPolicy).envId(reference to Environment).projectId(reference to Project)
// If a project membership is found, set the AccessApprovalRequest.requestedBy to the project membership id // If a project membership is found, set the AccessApprovalRequest.requestedBy to the project membership id
// If a project membership is not found, remove the AccessApprovalRequest record // If a project membership is not found, remove the AccessApprovalRequest record
await knex.raw(`
UPDATE ${TableName.AccessApprovalRequest} AS aar await knex(TableName.AccessApprovalRequest).update({
SET "requestedBy" = pm."id" // eslint-disable-next-line
FROM ${TableName.ProjectMembership} AS pm // @ts-ignore because generate schema happens after this
WHERE aar."requestedByUserId" = pm."userId" AND aar."policyId" IN ( requestedBy: knex(TableName.ProjectMembership)
SELECT "id" .select("id")
FROM ${TableName.AccessApprovalPolicy} .where("userId", knex.raw("??", [`${TableName.AccessApprovalRequest}.requestedByUserId`]))
WHERE "envId" IN ( });
SELECT "id"
FROM ${TableName.Environment}
WHERE "projectId" = pm."projectId"
)
)
`);
// Then, delete records where no matching project membership was found // Then, delete records where no matching project membership was found
await knex.raw(` await knex(TableName.AccessApprovalRequest).whereNull("requestedBy").delete();
DELETE FROM ${TableName.AccessApprovalRequest}
WHERE "requestedBy" IS NULL
`);
await knex.schema.alterTable(TableName.AccessApprovalRequest, (tb) => { await knex.schema.alterTable(TableName.AccessApprovalRequest, (tb) => {
if (hasRequestedByUserId) { if (hasRequestedByUserId) {