mirror of
https://github.com/fosrl/pangolin.git
synced 2026-03-30 22:46:40 +00:00
delete role move to new role
This commit is contained in:
@@ -2,7 +2,7 @@ import { Request, Response, NextFunction } from "express";
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { db } from "@server/db";
|
import { db } from "@server/db";
|
||||||
import { roles, userOrgRoles } from "@server/db";
|
import { roles, userOrgRoles } from "@server/db";
|
||||||
import { eq } from "drizzle-orm";
|
import { and, eq, exists, aliasedTable } from "drizzle-orm";
|
||||||
import response from "@server/lib/response";
|
import response from "@server/lib/response";
|
||||||
import HttpCode from "@server/types/HttpCode";
|
import HttpCode from "@server/types/HttpCode";
|
||||||
import createHttpError from "http-errors";
|
import createHttpError from "http-errors";
|
||||||
@@ -114,13 +114,32 @@ export async function deleteRole(
|
|||||||
}
|
}
|
||||||
|
|
||||||
await db.transaction(async (trx) => {
|
await db.transaction(async (trx) => {
|
||||||
// move all users from userOrgRoles with roleId to newRoleId
|
const uorNewRole = aliasedTable(userOrgRoles, "user_org_roles_new");
|
||||||
|
|
||||||
|
// Users who already have newRoleId: drop the old assignment only (unique on userId+orgId+roleId).
|
||||||
|
await trx.delete(userOrgRoles).where(
|
||||||
|
and(
|
||||||
|
eq(userOrgRoles.roleId, roleId),
|
||||||
|
exists(
|
||||||
|
trx
|
||||||
|
.select()
|
||||||
|
.from(uorNewRole)
|
||||||
|
.where(
|
||||||
|
and(
|
||||||
|
eq(uorNewRole.userId, userOrgRoles.userId),
|
||||||
|
eq(uorNewRole.orgId, userOrgRoles.orgId),
|
||||||
|
eq(uorNewRole.roleId, newRoleId)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
await trx
|
await trx
|
||||||
.update(userOrgRoles)
|
.update(userOrgRoles)
|
||||||
.set({ roleId: newRoleId })
|
.set({ roleId: newRoleId })
|
||||||
.where(eq(userOrgRoles.roleId, roleId));
|
.where(eq(userOrgRoles.roleId, roleId));
|
||||||
|
|
||||||
// delete the old role
|
|
||||||
await trx.delete(roles).where(eq(roles.roleId, roleId));
|
await trx.delete(roles).where(eq(roles.roleId, roleId));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user