feat(backend): Add API key DB table (#8593)
* add api key db tables * remove uniqueness constraint on prefix * add postfixpull/8496/head^2
parent
f719c7e70e
commit
359ae8307a
|
@ -0,0 +1,44 @@
|
|||
-- CreateEnum
|
||||
CREATE TYPE "APIKeyPermission" AS ENUM ('EXECUTE_GRAPH', 'READ_GRAPH', 'EXECUTE_BLOCK', 'READ_BLOCK');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "APIKeyStatus" AS ENUM ('ACTIVE', 'REVOKED', 'SUSPENDED');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "APIKey" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"prefix" TEXT NOT NULL,
|
||||
"postfix" TEXT NOT NULL,
|
||||
"key" TEXT NOT NULL,
|
||||
"status" "APIKeyStatus" NOT NULL DEFAULT 'ACTIVE',
|
||||
"permissions" "APIKeyPermission"[],
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"lastUsedAt" TIMESTAMP(3),
|
||||
"revokedAt" TIMESTAMP(3),
|
||||
"description" TEXT,
|
||||
"userId" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "APIKey_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "APIKey_key_key" ON "APIKey"("key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "APIKey_key_idx" ON "APIKey"("key");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "APIKey_prefix_idx" ON "APIKey"("prefix");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "APIKey_userId_idx" ON "APIKey"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "APIKey_status_idx" ON "APIKey"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "APIKey_userId_status_idx" ON "APIKey"("userId", "status");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "APIKey" ADD CONSTRAINT "APIKey_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
@ -27,6 +27,7 @@ model User {
|
|||
AnalyticsDetails AnalyticsDetails[]
|
||||
AnalyticsMetrics AnalyticsMetrics[]
|
||||
UserBlockCredit UserBlockCredit[]
|
||||
APIKeys APIKey[]
|
||||
|
||||
@@index([id])
|
||||
@@index([email])
|
||||
|
@ -277,3 +278,42 @@ model UserBlockCredit {
|
|||
|
||||
@@id(name: "creditTransactionIdentifier", [transactionKey, userId])
|
||||
}
|
||||
|
||||
enum APIKeyPermission {
|
||||
EXECUTE_GRAPH // Can execute agent graphs
|
||||
READ_GRAPH // Can get graph versions and details
|
||||
EXECUTE_BLOCK // Can execute individual blocks
|
||||
READ_BLOCK // Can get block information
|
||||
}
|
||||
|
||||
model APIKey {
|
||||
id String @id @default(uuid())
|
||||
name String
|
||||
prefix String // First 8 chars for identification
|
||||
postfix String
|
||||
key String @unique // Hashed key
|
||||
status APIKeyStatus @default(ACTIVE)
|
||||
permissions APIKeyPermission[]
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
lastUsedAt DateTime?
|
||||
revokedAt DateTime?
|
||||
|
||||
description String?
|
||||
|
||||
// Relation to user
|
||||
userId String
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([key])
|
||||
@@index([prefix])
|
||||
@@index([userId])
|
||||
@@index([status])
|
||||
@@index([userId, status])
|
||||
}
|
||||
|
||||
enum APIKeyStatus {
|
||||
ACTIVE
|
||||
REVOKED
|
||||
SUSPENDED
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue