Add internal session foundation
This commit is contained in:
+30
@@ -0,0 +1,30 @@
|
||||
CREATE TYPE "AccountSessionStatus" AS ENUM ('ACTIVE', 'REVOKED', 'EXPIRED');
|
||||
|
||||
CREATE TABLE "account_sessions" (
|
||||
"id" UUID NOT NULL,
|
||||
"user_id" UUID NOT NULL,
|
||||
"refresh_token_hash" TEXT NOT NULL,
|
||||
"status" "AccountSessionStatus" NOT NULL DEFAULT 'ACTIVE',
|
||||
"access_token_version" INTEGER NOT NULL DEFAULT 1,
|
||||
"expires_at" TIMESTAMP(3) NOT NULL,
|
||||
"last_refreshed_at" TIMESTAMP(3),
|
||||
"revoked_at" TIMESTAMP(3),
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
CONSTRAINT "account_sessions_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "account_sessions_refresh_token_hash_key"
|
||||
ON "account_sessions"("refresh_token_hash");
|
||||
|
||||
CREATE INDEX "account_sessions_user_id_idx"
|
||||
ON "account_sessions"("user_id");
|
||||
|
||||
CREATE INDEX "account_sessions_status_expires_at_idx"
|
||||
ON "account_sessions"("status", "expires_at");
|
||||
|
||||
ALTER TABLE "account_sessions"
|
||||
ADD CONSTRAINT "account_sessions_user_id_fkey"
|
||||
FOREIGN KEY ("user_id") REFERENCES "users"("id")
|
||||
ON DELETE CASCADE
|
||||
ON UPDATE CASCADE;
|
||||
@@ -33,6 +33,7 @@ model User {
|
||||
outgoingTransfers OwnershipTransfer[] @relation("OwnershipTransferFromUser")
|
||||
incomingTransfers OwnershipTransfer[] @relation("OwnershipTransferToUser")
|
||||
initiatedTransfers OwnershipTransfer[] @relation("OwnershipTransferRequestedByUser")
|
||||
accountSessions AccountSession[]
|
||||
|
||||
@@map("users")
|
||||
}
|
||||
@@ -282,6 +283,24 @@ model OwnershipTransfer {
|
||||
@@map("ownership_transfers")
|
||||
}
|
||||
|
||||
model AccountSession {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
userId String @map("user_id") @db.Uuid
|
||||
refreshTokenHash String @unique @map("refresh_token_hash")
|
||||
status AccountSessionStatus @default(ACTIVE)
|
||||
accessTokenVersion Int @default(1) @map("access_token_version")
|
||||
expiresAt DateTime @map("expires_at")
|
||||
lastRefreshedAt DateTime? @map("last_refreshed_at")
|
||||
revokedAt DateTime? @map("revoked_at")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: Cascade)
|
||||
|
||||
@@index([userId])
|
||||
@@index([status, expiresAt])
|
||||
@@map("account_sessions")
|
||||
}
|
||||
|
||||
enum UserAccountKind {
|
||||
LEGACY_DEFAULT
|
||||
GUEST
|
||||
@@ -294,6 +313,12 @@ enum UserAccountStatus {
|
||||
DELETED
|
||||
}
|
||||
|
||||
enum AccountSessionStatus {
|
||||
ACTIVE
|
||||
REVOKED
|
||||
EXPIRED
|
||||
}
|
||||
|
||||
enum DevicePlatform {
|
||||
MACOS
|
||||
IPHONE
|
||||
|
||||
Reference in New Issue
Block a user