2026-05-25 15:36:51 +08:00

53 lines
1.7 KiB
SQL

-- 素材公开分享票据:替代直接使用素材 ID 公开访问
CREATE TABLE IF NOT EXISTS "material_share_tokens" (
"id" TEXT NOT NULL,
"tokenHash" TEXT NOT NULL,
"materialId" TEXT NOT NULL,
"createdByUserId" TEXT NOT NULL,
"expiresAt" TIMESTAMP(3) NOT NULL,
"revokedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "material_share_tokens_pkey" PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX IF NOT EXISTS "material_share_tokens_tokenHash_key"
ON "material_share_tokens"("tokenHash");
CREATE INDEX IF NOT EXISTS "material_share_tokens_materialId_idx"
ON "material_share_tokens"("materialId");
CREATE INDEX IF NOT EXISTS "material_share_tokens_createdByUserId_idx"
ON "material_share_tokens"("createdByUserId");
CREATE INDEX IF NOT EXISTS "material_share_tokens_expiresAt_idx"
ON "material_share_tokens"("expiresAt");
CREATE INDEX IF NOT EXISTS "material_share_tokens_revokedAt_idx"
ON "material_share_tokens"("revokedAt");
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM pg_constraint
WHERE conname = 'material_share_tokens_materialId_fkey'
) THEN
ALTER TABLE "material_share_tokens"
ADD CONSTRAINT "material_share_tokens_materialId_fkey"
FOREIGN KEY ("materialId") REFERENCES "materials"("id")
ON DELETE CASCADE ON UPDATE CASCADE;
END IF;
IF NOT EXISTS (
SELECT 1
FROM pg_constraint
WHERE conname = 'material_share_tokens_createdByUserId_fkey'
) THEN
ALTER TABLE "material_share_tokens"
ADD CONSTRAINT "material_share_tokens_createdByUserId_fkey"
FOREIGN KEY ("createdByUserId") REFERENCES "users"("id")
ON DELETE CASCADE ON UPDATE CASCADE;
END IF;
END $$;