31 lines
1.0 KiB
SQL
31 lines
1.0 KiB
SQL
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;
|