summaryrefslogtreecommitdiffhomepage
path: root/cloud/core/src
diff options
context:
space:
mode:
Diffstat (limited to 'cloud/core/src')
-rw-r--r--cloud/core/src/key.ts26
-rw-r--r--cloud/core/src/schema/key.sql.ts7
2 files changed, 27 insertions, 6 deletions
diff --git a/cloud/core/src/key.ts b/cloud/core/src/key.ts
index b62a8961b..a8bcec401 100644
--- a/cloud/core/src/key.ts
+++ b/cloud/core/src/key.ts
@@ -1,7 +1,7 @@
import { z } from "zod"
import { fn } from "./util/fn"
import { Actor } from "./actor"
-import { and, Database, eq, sql } from "./drizzle"
+import { and, Database, eq, isNull, sql } from "./drizzle"
import { Identifier } from "./identifier"
import { KeyTable } from "./schema/key.sql"
@@ -12,7 +12,7 @@ export namespace Key {
tx
.select()
.from(KeyTable)
- .where(eq(KeyTable.workspaceID, workspace))
+ .where(and(eq(KeyTable.workspaceID, workspace), isNull(KeyTable.timeDeleted)))
.orderBy(sql`${KeyTable.timeCreated} DESC`),
)
return keys
@@ -48,8 +48,24 @@ export namespace Key {
export const remove = fn(z.object({ id: z.string() }), async (input) => {
const workspace = Actor.workspace()
- await Database.use((tx) =>
- tx.delete(KeyTable).where(and(eq(KeyTable.id, input.id), eq(KeyTable.workspaceID, workspace))),
- )
+ await Database.transaction(async (tx) => {
+ const row = await tx
+ .select({
+ name: KeyTable.name,
+ })
+ .from(KeyTable)
+ .where(and(eq(KeyTable.id, input.id), eq(KeyTable.workspaceID, workspace)))
+ .then((rows) => rows[0])
+ if (!row) return
+
+ await tx
+ .update(KeyTable)
+ .set({
+ timeDeleted: sql`now()`,
+ oldName: row.name,
+ name: input.id, // Use the key ID as the name
+ })
+ .where(and(eq(KeyTable.id, input.id), eq(KeyTable.workspaceID, workspace)))
+ })
})
}
diff --git a/cloud/core/src/schema/key.sql.ts b/cloud/core/src/schema/key.sql.ts
index 07982779b..98b99c788 100644
--- a/cloud/core/src/schema/key.sql.ts
+++ b/cloud/core/src/schema/key.sql.ts
@@ -10,8 +10,13 @@ export const KeyTable = mysqlTable(
...timestamps,
actor: json("actor").$type<Actor.Info>(),
name: varchar("name", { length: 255 }).notNull(),
+ oldName: varchar("old_name", { length: 255 }),
key: varchar("key", { length: 255 }).notNull(),
timeUsed: utc("time_used"),
},
- (table) => [...workspaceIndexes(table), uniqueIndex("global_key").on(table.key)],
+ (table) => [
+ ...workspaceIndexes(table),
+ uniqueIndex("global_key").on(table.key),
+ uniqueIndex("name").on(table.workspaceID, table.name),
+ ],
)