/** * apply-335411-full.js * ------------------------------------------------------------ * 一回限りの直接実行スクリプト(2026-07-30、SiteId 335411 見積回答ファイル転記+一括DL追加)。 * ユーザーが「反映させてください」と明示許可したため作成。 * * updatesitesettings(部分更新)はこのPleasanterデプロイでは200を返しつつ * 実際には永続化されないケースが確認されているため(project-pleasanter-updatesitesettings-noop)、 * updatesite(Mode:"full")で送信する。 * * デフォルトはプレビューのみ(送信なし)。--execute を付けたときだけ実送信する。 * ------------------------------------------------------------ */ const fs = require("fs"); const path = require("path"); const baseDir = __dirname; const config = JSON.parse(fs.readFileSync(path.join(baseDir, "config.json"), "utf-8")); const desired = JSON.parse(fs.readFileSync(path.join(baseDir, "desired_config.json"), "utf-8")); const siteId = 335411; const currentPath = path.join(baseDir, "siteSettingJsons", `site-${siteId}_latest.json`); const current = JSON.parse(fs.readFileSync(currentPath, "utf-8")).Response.Data; // SiteSettingsは現状を丸ごとベースにし、Scriptsのみdesired_config.json(編集済み)で置き換える const siteSettings = JSON.parse(JSON.stringify(current.SiteSettings)); siteSettings.Scripts = desired.SiteSettings.Scripts; const body = { ApiVersion: config.ApiVersion || "1.1", ApiKey: config.ApiKey, SiteId: siteId, Title: current.Title, ReferenceType: current.ReferenceType, ParentId: current.ParentId, InheritPermission: current.InheritPermission, Permissions: current.Permissions || [], SiteSettings: siteSettings, }; const url = `${config.BaseUrl.replace(/\/+$/, "")}/api/items/${siteId}/updatesite`; function maskApiKey(key) { return key && key.length > 8 ? key.slice(0, 4) + "****" + key.slice(-4) : "****"; } const execute = process.argv.includes("--execute"); console.log("========================================"); console.log(` Mode: full (updatesite) execute=${execute}`); console.log("========================================"); console.log(`URL : ${url}`); console.log(`SiteId: ${siteId}`); console.log("Scripts Id1/Id3 本文差分あり(transcribeEstimateAttachments/estimateAttachmentsDLButton追加)。Styles/ServerScripts/Processesは現状のまま。"); console.log(""); const maskedBody = { ...body, ApiKey: maskApiKey(body.ApiKey) }; const outDir = path.join( baseDir, "configs", "site-335411_②問い合わせ内容管理 Ver0.3", "modify", "2026-07-30T1000_見積回答ファイル転記_一括DL追加" ); fs.writeFileSync(path.join(outDir, "send_body_full_masked.json"), JSON.stringify(maskedBody, null, 2), "utf-8"); console.log(`送信予定Body(マスク済み)を保存しました: ${path.join(outDir, "send_body_full_masked.json")}`); if (!execute) { console.log("\n[プレビューのみ] 実際の送信は行っていません。--execute を付けて再実行すると送信します。"); process.exit(0); } (async () => { const res = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(body), }); const text = await res.text(); console.log(`HTTP ${res.status}`); console.log(text); fs.writeFileSync( path.join(outDir, `site-335411_full_update_result_${new Date().toISOString().replace(/[:.]/g, "-")}.json`), JSON.stringify({ status: res.status, body: text }, null, 2), "utf-8" ); })();