Files
lindyson-ai/apps/api/migrations/060_admin_direct_provider_usage.sql
Juno ChowandClaude Fable 5.1 f665082dad chore: 建立产品仓库,完成开源前的敏感信息清理
前端(Vite + React)、API/worker(Fastify + BullMQ)、api-contracts 契约包、
迁移脚本、测试与自托管 docker-compose 示例。

开源准备:运维脚本与机器信息已拆到私有仓库;公司名、备案号、隐私邮箱改读
publicCompliance.local.json(仓库只保留占位模板);站点地址与客服二维码改为
VITE_ 环境变量;fixtures 中的真实用户标识已匿名化;三个 package.json 标注
Apache-2.0。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-16 02:10:46 +08:00

39 lines
1.4 KiB
SQL

-- 管理员可直接调用供应商生成营销素材;这类用量进入供应商成本账本,
-- 但不伪造站内生成任务、数字资产或用户积分流水。
ALTER TABLE provider_usage_records
ADD COLUMN IF NOT EXISTS initiated_by_admin_user_id uuid;
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM pg_constraint
WHERE conname = 'provider_usage_records_admin_user_fk'
AND conrelid = 'provider_usage_records'::regclass
) THEN
ALTER TABLE provider_usage_records
ADD CONSTRAINT provider_usage_records_admin_user_fk
FOREIGN KEY (initiated_by_admin_user_id)
REFERENCES users(id)
ON DELETE RESTRICT;
END IF;
END $$;
ALTER TABLE provider_usage_records
DROP CONSTRAINT IF EXISTS provider_usage_records_single_origin_check;
ALTER TABLE provider_usage_records
ADD CONSTRAINT provider_usage_records_single_origin_check CHECK (
task_id IS NULL OR initiated_by_admin_user_id IS NULL
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_provider_usage_records_admin_direct_task
ON provider_usage_records(provider, provider_task_id)
WHERE task_id IS NULL
AND initiated_by_admin_user_id IS NOT NULL
AND provider_task_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS idx_provider_usage_records_admin_direct_user
ON provider_usage_records(initiated_by_admin_user_id, created_at DESC)
WHERE initiated_by_admin_user_id IS NOT NULL;