Skip to content

Commit 101eace

Browse files
committed
regen migrations
1 parent 2516396 commit 101eace

File tree

6 files changed

+73
-97
lines changed

6 files changed

+73
-97
lines changed

apps/sim/app/api/permission-groups/[id]/members/bulk/route.ts

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { db } from '@sim/db'
22
import { member, permissionGroup, permissionGroupMember } from '@sim/db/schema'
33
import { createLogger } from '@sim/logger'
4-
import { and, eq, inArray, ne } from 'drizzle-orm'
4+
import { and, eq, inArray } from 'drizzle-orm'
55
import { type NextRequest, NextResponse } from 'next/server'
66
import { z } from 'zod'
77
import { getSession } from '@/lib/auth'
@@ -95,54 +95,49 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
9595
return NextResponse.json({ added: 0, moved: 0 })
9696
}
9797

98-
const existingInThisGroup = await db
99-
.select({ userId: permissionGroupMember.userId })
100-
.from(permissionGroupMember)
101-
.where(
102-
and(
103-
eq(permissionGroupMember.permissionGroupId, id),
104-
inArray(permissionGroupMember.userId, targetUserIds)
105-
)
106-
)
107-
108-
const existingUserIds = new Set(existingInThisGroup.map((m) => m.userId))
109-
const usersToAdd = targetUserIds.filter((uid) => !existingUserIds.has(uid))
110-
111-
if (usersToAdd.length === 0) {
112-
return NextResponse.json({ added: 0, moved: 0 })
113-
}
114-
115-
const otherGroupMemberships = await db
98+
const existingMemberships = await db
11699
.select({
117100
id: permissionGroupMember.id,
118101
userId: permissionGroupMember.userId,
102+
permissionGroupId: permissionGroupMember.permissionGroupId,
119103
})
120104
.from(permissionGroupMember)
121-
.innerJoin(permissionGroup, eq(permissionGroupMember.permissionGroupId, permissionGroup.id))
122-
.where(
123-
and(
124-
eq(permissionGroup.organizationId, result.group.organizationId),
125-
inArray(permissionGroupMember.userId, usersToAdd),
126-
ne(permissionGroupMember.permissionGroupId, id)
127-
)
128-
)
105+
.where(inArray(permissionGroupMember.userId, targetUserIds))
129106

130-
const movedCount = otherGroupMemberships.length
107+
const alreadyInThisGroup = new Set(
108+
existingMemberships.filter((m) => m.permissionGroupId === id).map((m) => m.userId)
109+
)
110+
const usersToAdd = targetUserIds.filter((uid) => !alreadyInThisGroup.has(uid))
131111

132-
if (otherGroupMemberships.length > 0) {
133-
const idsToDelete = otherGroupMemberships.map((m) => m.id)
134-
await db.delete(permissionGroupMember).where(inArray(permissionGroupMember.id, idsToDelete))
112+
if (usersToAdd.length === 0) {
113+
return NextResponse.json({ added: 0, moved: 0 })
135114
}
136115

137-
const newMembers = usersToAdd.map((userId) => ({
138-
id: crypto.randomUUID(),
139-
permissionGroupId: id,
140-
userId,
141-
assignedBy: session.user.id,
142-
assignedAt: new Date(),
143-
}))
116+
const membershipsToDelete = existingMemberships.filter(
117+
(m) => m.permissionGroupId !== id && usersToAdd.includes(m.userId)
118+
)
119+
const movedCount = membershipsToDelete.length
120+
121+
await db.transaction(async (tx) => {
122+
if (membershipsToDelete.length > 0) {
123+
await tx.delete(permissionGroupMember).where(
124+
inArray(
125+
permissionGroupMember.id,
126+
membershipsToDelete.map((m) => m.id)
127+
)
128+
)
129+
}
144130

145-
await db.insert(permissionGroupMember).values(newMembers)
131+
const newMembers = usersToAdd.map((userId) => ({
132+
id: crypto.randomUUID(),
133+
permissionGroupId: id,
134+
userId,
135+
assignedBy: session.user.id,
136+
assignedAt: new Date(),
137+
}))
138+
139+
await tx.insert(permissionGroupMember).values(newMembers)
140+
})
146141

147142
logger.info('Bulk added members to permission group', {
148143
permissionGroupId: id,
@@ -156,6 +151,15 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
156151
if (error instanceof z.ZodError) {
157152
return NextResponse.json({ error: error.errors[0].message }, { status: 400 })
158153
}
154+
if (
155+
error instanceof Error &&
156+
error.message.includes('permission_group_member_user_id_unique')
157+
) {
158+
return NextResponse.json(
159+
{ error: 'One or more users are already in a permission group' },
160+
{ status: 409 }
161+
)
162+
}
159163
logger.error('Error bulk adding members to permission group', error)
160164
return NextResponse.json({ error: 'Failed to add members' }, { status: 500 })
161165
}

apps/sim/app/api/permission-groups/[id]/members/route.ts

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -110,29 +110,27 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
110110
)
111111
}
112112

113+
const [existingMembership] = await db
114+
.select({
115+
id: permissionGroupMember.id,
116+
permissionGroupId: permissionGroupMember.permissionGroupId,
117+
})
118+
.from(permissionGroupMember)
119+
.where(eq(permissionGroupMember.userId, userId))
120+
.limit(1)
121+
122+
if (existingMembership?.permissionGroupId === id) {
123+
return NextResponse.json(
124+
{ error: 'User is already in this permission group' },
125+
{ status: 409 }
126+
)
127+
}
128+
113129
const newMember = await db.transaction(async (tx) => {
114-
const existingMembership = await tx
115-
.select({
116-
id: permissionGroupMember.id,
117-
permissionGroupId: permissionGroupMember.permissionGroupId,
118-
})
119-
.from(permissionGroupMember)
120-
.innerJoin(permissionGroup, eq(permissionGroupMember.permissionGroupId, permissionGroup.id))
121-
.where(
122-
and(
123-
eq(permissionGroupMember.userId, userId),
124-
eq(permissionGroup.organizationId, result.group.organizationId)
125-
)
126-
)
127-
.limit(1)
128-
129-
if (existingMembership.length > 0) {
130-
if (existingMembership[0].permissionGroupId === id) {
131-
throw new Error('ALREADY_IN_GROUP')
132-
}
130+
if (existingMembership) {
133131
await tx
134132
.delete(permissionGroupMember)
135-
.where(eq(permissionGroupMember.id, existingMembership[0].id))
133+
.where(eq(permissionGroupMember.id, existingMembership.id))
136134
}
137135

138136
const memberData = {
@@ -158,11 +156,11 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
158156
if (error instanceof z.ZodError) {
159157
return NextResponse.json({ error: error.errors[0].message }, { status: 400 })
160158
}
161-
if (error instanceof Error && error.message === 'ALREADY_IN_GROUP') {
162-
return NextResponse.json(
163-
{ error: 'User is already in this permission group' },
164-
{ status: 409 }
165-
)
159+
if (
160+
error instanceof Error &&
161+
error.message.includes('permission_group_member_user_id_unique')
162+
) {
163+
return NextResponse.json({ error: 'User is already in a permission group' }, { status: 409 })
166164
}
167165
logger.error('Error adding member to permission group', error)
168166
return NextResponse.json({ error: 'Failed to add member' }, { status: 500 })

packages/db/migrations/0137_absurd_sumo.sql renamed to packages/db/migrations/0137_yellow_korath.sql

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,4 @@ CREATE INDEX "permission_group_organization_id_idx" ON "permission_group" USING
2626
CREATE INDEX "permission_group_created_by_idx" ON "permission_group" USING btree ("created_by");--> statement-breakpoint
2727
CREATE UNIQUE INDEX "permission_group_org_name_unique" ON "permission_group" USING btree ("organization_id","name");--> statement-breakpoint
2828
CREATE INDEX "permission_group_member_group_id_idx" ON "permission_group_member" USING btree ("permission_group_id");--> statement-breakpoint
29-
CREATE INDEX "permission_group_member_user_id_idx" ON "permission_group_member" USING btree ("user_id");--> statement-breakpoint
30-
CREATE UNIQUE INDEX "permission_group_member_unique" ON "permission_group_member" USING btree ("permission_group_id","user_id");
29+
CREATE UNIQUE INDEX "permission_group_member_user_id_unique" ON "permission_group_member" USING btree ("user_id");

packages/db/migrations/meta/0137_snapshot.json

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"id": "60200982-7693-47b9-a396-c2ffad54f529",
2+
"id": "7bffede1-bcac-4f13-9039-7236379e5b63",
33
"prevId": "ff6b124c-50b5-4e92-bbe3-0b162a184d5b",
44
"version": "7",
55
"dialect": "postgresql",
@@ -4267,8 +4267,8 @@
42674267
"method": "btree",
42684268
"with": {}
42694269
},
4270-
"permission_group_member_user_id_idx": {
4271-
"name": "permission_group_member_user_id_idx",
4270+
"permission_group_member_user_id_unique": {
4271+
"name": "permission_group_member_user_id_unique",
42724272
"columns": [
42734273
{
42744274
"expression": "user_id",
@@ -4277,27 +4277,6 @@
42774277
"nulls": "last"
42784278
}
42794279
],
4280-
"isUnique": false,
4281-
"concurrently": false,
4282-
"method": "btree",
4283-
"with": {}
4284-
},
4285-
"permission_group_member_unique": {
4286-
"name": "permission_group_member_unique",
4287-
"columns": [
4288-
{
4289-
"expression": "permission_group_id",
4290-
"isExpression": false,
4291-
"asc": true,
4292-
"nulls": "last"
4293-
},
4294-
{
4295-
"expression": "user_id",
4296-
"isExpression": false,
4297-
"asc": true,
4298-
"nulls": "last"
4299-
}
4300-
],
43014280
"isUnique": true,
43024281
"concurrently": false,
43034282
"method": "btree",

packages/db/migrations/meta/_journal.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -957,8 +957,8 @@
957957
{
958958
"idx": 137,
959959
"version": "7",
960-
"when": 1767922492454,
961-
"tag": "0137_absurd_sumo",
960+
"when": 1767924777319,
961+
"tag": "0137_yellow_korath",
962962
"breakpoints": true
963963
}
964964
]

packages/db/schema.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,10 +1919,6 @@ export const permissionGroupMember = pgTable(
19191919
},
19201920
(table) => ({
19211921
permissionGroupIdIdx: index('permission_group_member_group_id_idx').on(table.permissionGroupId),
1922-
userIdIdx: index('permission_group_member_user_id_idx').on(table.userId),
1923-
uniqueMembership: uniqueIndex('permission_group_member_unique').on(
1924-
table.permissionGroupId,
1925-
table.userId
1926-
),
1922+
userIdUnique: uniqueIndex('permission_group_member_user_id_unique').on(table.userId),
19271923
})
19281924
)

0 commit comments

Comments
 (0)