133 lines
4.0 KiB
SQL
133 lines
4.0 KiB
SQL
CREATE TABLE IF NOT EXISTS "user" (
|
|
"id" TEXT PRIMARY KEY NOT NULL,
|
|
"name" TEXT,
|
|
"email" TEXT NOT NULL,
|
|
"email_verified" INTEGER NOT NULL DEFAULT 0,
|
|
"image" TEXT,
|
|
"created_at" INTEGER NOT NULL,
|
|
"updated_at" INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "user_email_unique" ON "user" ("email");
|
|
|
|
CREATE TABLE IF NOT EXISTS "session" (
|
|
"id" TEXT PRIMARY KEY NOT NULL,
|
|
"expires_at" INTEGER NOT NULL,
|
|
"token" TEXT NOT NULL,
|
|
"created_at" INTEGER NOT NULL,
|
|
"updated_at" INTEGER NOT NULL,
|
|
"ip_address" TEXT,
|
|
"user_agent" TEXT,
|
|
"user_id" TEXT NOT NULL,
|
|
FOREIGN KEY ("user_id") REFERENCES "user"("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "session_token_unique" ON "session" ("token");
|
|
CREATE INDEX IF NOT EXISTS "session_user_id_idx" ON "session" ("user_id");
|
|
|
|
CREATE TABLE IF NOT EXISTS "account" (
|
|
"id" TEXT PRIMARY KEY NOT NULL,
|
|
"account_id" TEXT NOT NULL,
|
|
"provider_id" TEXT NOT NULL,
|
|
"user_id" TEXT NOT NULL,
|
|
"access_token" TEXT,
|
|
"refresh_token" TEXT,
|
|
"id_token" TEXT,
|
|
"access_token_expires_at" INTEGER,
|
|
"refresh_token_expires_at" INTEGER,
|
|
"scope" TEXT,
|
|
"password" TEXT,
|
|
"created_at" INTEGER NOT NULL,
|
|
"updated_at" INTEGER NOT NULL,
|
|
FOREIGN KEY ("user_id") REFERENCES "user"("id")
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS "account_user_id_idx" ON "account" ("user_id");
|
|
CREATE INDEX IF NOT EXISTS "account_provider_account_idx" ON "account" ("provider_id", "account_id");
|
|
|
|
CREATE TABLE IF NOT EXISTS "verification" (
|
|
"id" TEXT PRIMARY KEY NOT NULL,
|
|
"identifier" TEXT NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
"expires_at" INTEGER NOT NULL,
|
|
"created_at" INTEGER,
|
|
"updated_at" INTEGER
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS "verification_identifier_idx" ON "verification" ("identifier");
|
|
|
|
CREATE TABLE IF NOT EXISTS "apikey" (
|
|
"id" TEXT PRIMARY KEY NOT NULL,
|
|
"config_id" TEXT,
|
|
"name" TEXT,
|
|
"start" TEXT,
|
|
"prefix" TEXT,
|
|
"key" TEXT NOT NULL,
|
|
"reference_id" TEXT,
|
|
"enabled" INTEGER DEFAULT 1,
|
|
"rate_limit_enabled" INTEGER DEFAULT 1,
|
|
"rate_limit_time_window" INTEGER,
|
|
"rate_limit_max" INTEGER,
|
|
"request_count" INTEGER DEFAULT 0,
|
|
"remaining" INTEGER,
|
|
"refill_interval" INTEGER,
|
|
"refill_amount" INTEGER,
|
|
"last_refill_at" INTEGER,
|
|
"last_request" INTEGER,
|
|
"permissions" TEXT,
|
|
"metadata" TEXT,
|
|
"expires_at" INTEGER,
|
|
"created_at" INTEGER NOT NULL,
|
|
"updated_at" INTEGER NOT NULL,
|
|
"avatar_id" TEXT,
|
|
FOREIGN KEY ("avatar_id") REFERENCES "avatars"("id") ON DELETE SET NULL
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS "apikey_reference_id_idx" ON "apikey" ("reference_id");
|
|
CREATE INDEX IF NOT EXISTS "apikey_key_idx" ON "apikey" ("key");
|
|
|
|
-- 形象/表情包集合表
|
|
CREATE TABLE IF NOT EXISTS "avatars" (
|
|
"id" TEXT PRIMARY KEY NOT NULL,
|
|
"user_id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"created_at" INTEGER NOT NULL,
|
|
"updated_at" INTEGER NOT NULL,
|
|
FOREIGN KEY ("user_id") REFERENCES "user"("id") ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS "avatars_user_id_idx" ON "avatars" ("user_id");
|
|
|
|
-- 表情表
|
|
CREATE TABLE IF NOT EXISTS "emojis" (
|
|
"id" TEXT PRIMARY KEY NOT NULL,
|
|
"avatar_id" TEXT NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"url" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"trigger_type" TEXT NOT NULL DEFAULT 'message',
|
|
"trigger_result" TEXT,
|
|
"sort_order" INTEGER DEFAULT 0,
|
|
"created_at" INTEGER NOT NULL,
|
|
FOREIGN KEY ("avatar_id") REFERENCES "avatars"("id") ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS "emojis_avatar_id_idx" ON "emojis" ("avatar_id");
|
|
CREATE UNIQUE INDEX IF NOT EXISTS "emojis_avatar_default_unique_idx" ON "emojis" ("avatar_id") WHERE "trigger_type" = 'default';
|
|
|
|
CREATE TABLE IF NOT EXISTS "user_file" (
|
|
"id" TEXT PRIMARY KEY NOT NULL,
|
|
"user_id" TEXT NOT NULL,
|
|
"filename" TEXT NOT NULL,
|
|
"original_name" TEXT NOT NULL,
|
|
"content_type" TEXT NOT NULL,
|
|
"size" INTEGER NOT NULL,
|
|
"s3_key" TEXT NOT NULL,
|
|
"url" TEXT NOT NULL,
|
|
"uploaded_at" INTEGER NOT NULL,
|
|
FOREIGN KEY ("user_id") REFERENCES "user"("id") ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS "user_file_user_id_idx" ON "user_file" ("user_id");
|