Skip to content

Commit d1891c9

Browse files
committed
perf(credentials): eliminate redundant permissions query
Derive memberUserIds from wsPermissionRows + workspace owner instead of calling getWorkspaceMemberUserIds separately. This removes a duplicate query on the permissions table at every call site.
1 parent 71db264 commit d1891c9

2 files changed

Lines changed: 17 additions & 14 deletions

File tree

apps/sim/app/api/credentials/route.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import {
2222
normalizeAtlassianDomain,
2323
validateAtlassianServiceAccount,
2424
} from '@/lib/credentials/atlassian-service-account'
25-
import { getWorkspaceMemberUserIds } from '@/lib/credentials/environment'
2625
import { syncWorkspaceOAuthCredentialsForUser } from '@/lib/credentials/oauth'
2726
import { getServiceConfigByProviderId } from '@/lib/oauth'
2827
import {
@@ -535,18 +534,18 @@ export const POST = withRouteHandler(async (request: NextRequest) => {
535534
})
536535

537536
if ((type === 'env_workspace' || type === 'service_account') && workspaceRow?.ownerId) {
538-
const [workspaceUserIds, wsPermissionRows] = await Promise.all([
539-
getWorkspaceMemberUserIds(workspaceId),
540-
db
541-
.select({ userId: permissions.userId, permissionType: permissions.permissionType })
542-
.from(permissions)
543-
.where(
544-
and(eq(permissions.entityType, 'workspace'), eq(permissions.entityId, workspaceId))
545-
),
546-
])
537+
const wsPermissionRows = await db
538+
.select({ userId: permissions.userId, permissionType: permissions.permissionType })
539+
.from(permissions)
540+
.where(
541+
and(eq(permissions.entityType, 'workspace'), eq(permissions.entityId, workspaceId))
542+
)
547543
const wsPermissionByUser = new Map(
548544
wsPermissionRows.map((row) => [row.userId, row.permissionType])
549545
)
546+
const workspaceUserIds = Array.from(
547+
new Set([workspaceRow.ownerId, ...wsPermissionRows.map((row) => row.userId)])
548+
)
550549
if (workspaceUserIds.length > 0) {
551550
for (const memberUserId of workspaceUserIds) {
552551
const wsPermission = wsPermissionByUser.get(memberUserId)

apps/sim/lib/credentials/environment.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,12 @@ export async function syncWorkspaceEnvCredentials(params: {
128128
actingUserId: string
129129
}) {
130130
const { workspaceId, envKeys, actingUserId } = params
131-
const [[workspaceRow], memberUserIds, wsPermissionRows] = await Promise.all([
131+
const [[workspaceRow], wsPermissionRows] = await Promise.all([
132132
db
133133
.select({ ownerId: workspace.ownerId })
134134
.from(workspace)
135135
.where(eq(workspace.id, workspaceId))
136136
.limit(1),
137-
getWorkspaceMemberUserIds(workspaceId),
138137
db
139138
.select({ userId: permissions.userId, permissionType: permissions.permissionType })
140139
.from(permissions)
@@ -146,6 +145,9 @@ export async function syncWorkspaceEnvCredentials(params: {
146145
const wsPermissionByUser = new Map(
147146
wsPermissionRows.map((row) => [row.userId, row.permissionType])
148147
)
148+
const memberUserIds = Array.from(
149+
new Set([workspaceRow.ownerId, ...wsPermissionRows.map((row) => row.userId)])
150+
)
149151

150152
const normalizedKeys = Array.from(new Set(envKeys.filter(Boolean)))
151153
const existingCredentials = await db
@@ -231,13 +233,12 @@ export async function createWorkspaceEnvCredentials(params: {
231233
const keys = Array.from(new Set(newKeys.filter(Boolean)))
232234
if (keys.length === 0) return
233235

234-
const [[workspaceRow], memberUserIds, wsPermissionRows] = await Promise.all([
236+
const [[workspaceRow], wsPermissionRows] = await Promise.all([
235237
db
236238
.select({ ownerId: workspace.ownerId })
237239
.from(workspace)
238240
.where(eq(workspace.id, workspaceId))
239241
.limit(1),
240-
getWorkspaceMemberUserIds(workspaceId),
241242
db
242243
.select({ userId: permissions.userId, permissionType: permissions.permissionType })
243244
.from(permissions)
@@ -250,6 +251,9 @@ export async function createWorkspaceEnvCredentials(params: {
250251
const wsPermissionByUser = new Map(
251252
wsPermissionRows.map((row) => [row.userId, row.permissionType])
252253
)
254+
const memberUserIds = Array.from(
255+
new Set([ownerUserId, ...wsPermissionRows.map((row) => row.userId)])
256+
)
253257
const now = new Date()
254258
const createdIds: string[] = []
255259

0 commit comments

Comments
 (0)