-- =============================================================================
-- Muse 对象存储主配置（master FileConfig）—— dev / test 可复用、无密钥 provisioning 种子
-- 关联：plan 2026-06-18-001-feat-object-storage-fileservice-plan.md U7 / R4 / R6；U9/U10 真存储往返 IT 依赖
-- 适用库：已含 yudao 基座表 infra_file_config（见 sql/dev/yudao-base-schema-postgres.sql）的 PG 库
-- =============================================================================
--
-- 为什么默认用 LOCAL 文件客户端（storage=10）而非 S3/MinIO：
--   1) 确定性：LOCAL 客户端把字节写到本地文件系统 basePath，导出→存储→下载 round-trip 不依赖
--      任何外部服务，单测 / 基础 IT 可稳定跑绿，无需起 MinIO。
--   2) 零密钥（R4）：LocalFileClientConfig 只有 basePath + domain，不含 accessKey/accessSecret/endpoint，
--      因此本种子可安全入仓——绝不在仓库 / 测试报告中写任何存储凭据。
--   3) 私有语义（R6/KTD5）：LOCAL 无公网直链，下载只能经后端字节代理（getFileContentByPath），
--      与“桶私有 + 后端字节代理”一致；可暴露 path-keyed 取回的真实行为（不会被公有直链掩盖）。
--
-- 何时改用真 MinIO（R7 反假绿完成门要求的“真对象存储往返”）：
--   把下方 [可选 B] 的 S3/MinIO 主配置打开（并把 LOCAL 行的 master 置 false 或不插入）。
--   ⚠️ S3/MinIO 的 accessKey/accessSecret/endpoint 一律走环境变量注入，绝不写进本文件：
--      推荐在 IT 启动期用 env（如 ~/.config/muse-repo/infra.env）读出后，由 IT 代码构造 config JSON
--      或经 FileConfigController/Service 落库，而不是把含密钥的 INSERT 提交到仓库。
--      私有桶务必 enablePublicAccess=false（"enablePublicAccess":false），否则公有桶会让 IT 假绿。
--
-- 幂等：固定 id + ON CONFLICT (id) DO NOTHING，可重复执行。
-- master=true：FileConfigServiceImpl.getMasterFileClient() 经 selectByMaster() 取本行；全库应仅一行 master。
-- =============================================================================

-- -----------------------------------------------------------------------------
-- [默认 A] LOCAL 文件系统主配置（无密钥；id 固定 1001 以便幂等与 IT 引用）
--   config 为 LocalFileClientConfig 的 JSON：必须带 "@class"（FileClientConfig 用 @JsonTypeInfo(Id.CLASS)）。
--   basePath：本地落盘根目录；IT 可改为临时目录（如 java.io.tmpdir 下子目录）。此处给一个稳定缺省值。
--   domain：仅用于拼装访问 URL（下载不依赖它，走后端字节代理），给占位 http 域即可。
-- -----------------------------------------------------------------------------
INSERT INTO "infra_file_config" ("id", "name", "storage", "remark", "master", "config", "creator", "updater", "deleted")
VALUES (
    1001,
    'dev-local-master',
    10, -- FileStorageEnum.LOCAL
    'dev/test 无密钥本地文件系统主配置（U7/U9/U10）',
    TRUE,
    '{"@class":"cn.iocoder.muse.module.infra.framework.file.core.client.local.LocalFileClientConfig","basePath":"/tmp/muse-file-storage","domain":"http://127.0.0.1:48080"}',
    'system',
    'system',
    FALSE
)
ON CONFLICT ("id") DO NOTHING;

-- -----------------------------------------------------------------------------
-- [可选 B] S3 / MinIO 主配置（真对象存储往返，R7）——【模板，勿提交真实密钥】
--   仅当需要真 MinIO 取证时启用；启用时请：
--     1) 注释掉 [默认 A] 或将其 master 改 FALSE（master 全库唯一）；
--     2) 把 endpoint/accessKey/accessSecret 从 env 注入，绝不在本文件硬编码；
--     3) 保持 "enablePublicAccess":false（私有桶，R6/KTD5）。
--   下面用占位符明示结构，故意不可直接执行（${...} 占位，避免误入仓的真密钥）：
--
-- INSERT INTO "infra_file_config" ("id","name","storage","remark","master","config","creator","updater","deleted")
-- VALUES (
--     1002, 'it-minio-master', 20, -- FileStorageEnum.S3
--     'IT 真 MinIO 私有桶主配置（密钥经 env 注入，勿入仓）', TRUE,
--     '{"@class":"cn.iocoder.muse.module.infra.framework.file.core.client.s3.S3FileClientConfig",'
--       || '"endpoint":"${MUSE_MINIO_ENDPOINT}","bucket":"${MUSE_MINIO_BUCKET}",'
--       || '"accessKey":"${MUSE_MINIO_ACCESS_KEY}","accessSecret":"${MUSE_MINIO_ACCESS_SECRET}",'
--       || '"enablePathStyleAccess":true,"enablePublicAccess":false}',
--     'system','system', FALSE
-- )
-- ON CONFLICT ("id") DO NOTHING;
