53 lines
1.7 KiB
SQL
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 $$;
|