// 健康診断管理 SiteId 513156(実施年度-集計): 診断結果集計Num項目(Num061~071/081~091)の // ControlType/Min/Maxを削除し、Unit:"人"/TextAlign:20を付与するワンショットスクリプト // (NumA~Hは既にUnit:"人"/TextAlign:20設定済みのため対象外。508971側のSpinner/Min0/Max1指定は // このサイトの集計項目には不要なため、508971とは別設定にする)。 // updatesite(Mode:full)を使う。--execute指定時のみ実際に送信、指定なければプレビューのみ出力。 "use strict"; const fs = require("fs"); const path = require("path"); const { findSiteDir, newModifyDir } = require("../../site-paths.js"); const PROJECT_NAME = "健康診断管理"; const ENV = "production"; const SITE_ID = 513156; const SITE_NAME = "実施年度-集計"; const REQUEST_LABEL = "fix-num-attrs-unit-textalign"; const TARGET_COLUMNS = [ "Num061", "Num062", "Num063", "Num064", "Num065", "Num066", "Num067", "Num068", "Num069", "Num070", "Num071", "Num081", "Num082", "Num083", "Num084", "Num085", "Num086", "Num087", "Num088", "Num089", "Num090", "Num091", ]; const REPO_ROOT = path.join(__dirname, "..", "..", "..", ".."); const PROJECT_ROOT = path.join(REPO_ROOT, PROJECT_NAME); const CONFIGS_DIR = path.join(PROJECT_ROOT, "configs", ENV); function loadServerConfig() { const configPath = path.join(REPO_ROOT, `config_${ENV}.json`); const config = JSON.parse(fs.readFileSync(configPath, "utf-8")); if (!config.BaseUrl || !config.ApiKey) { console.error(`[エラー] ${configPath} に BaseUrl / ApiKey を設定してください。`); process.exit(1); } return config; } function loadLatest() { const siteDir = findSiteDir(CONFIGS_DIR, SITE_ID); if (!siteDir) { console.error(`[エラー] configs/${ENV}/site-${SITE_ID}_* が見つかりません。先にget-site-config.jsを実行してください。`); process.exit(1); } const p = path.join(siteDir, "sitesettings", `site-${SITE_ID}_latest.json`); const raw = JSON.parse(fs.readFileSync(p, "utf-8")); return { current: raw.Response.Data, siteDir, rawText: fs.readFileSync(p, "utf-8") }; } function buildDesiredSiteSettings(current) { const settings = JSON.parse(JSON.stringify(current.SiteSettings)); const changed = []; for (const name of TARGET_COLUMNS) { const col = settings.Columns.find((c) => c.ColumnName === name); if (!col) { console.error(`[エラー] Columns内に${name}が見つかりません。`); process.exit(1); } const before = JSON.parse(JSON.stringify(col)); delete col.ControlType; delete col.Min; delete col.Max; col.Unit = "人"; col.TextAlign = 20; changed.push({ name, before, after: JSON.parse(JSON.stringify(col)) }); } // Links省略厳禁(全置換のため既存値をそのまま含める) settings.Links = current.SiteSettings.Links || []; return { settings, changed }; } function buildUpdateBody(apiKey, current, desiredSettings) { return { ApiVersion: "1.1", ApiKey: apiKey, SiteId: SITE_ID, Title: current.Title, ReferenceType: current.ReferenceType, ParentId: current.ParentId, InheritPermission: current.InheritPermission, SiteSettings: desiredSettings, }; } const execute = process.argv.includes("--execute"); const server = loadServerConfig(); (async () => { const { current, siteDir, rawText } = loadLatest(); const { settings: desiredSettings, changed } = buildDesiredSiteSettings(current); const body = buildUpdateBody(server.ApiKey, current, desiredSettings); const modifyDir = newModifyDir(siteDir, REQUEST_LABEL); const timestamp = new Date().toISOString().replace(/[:.]/g, "-"); fs.writeFileSync(path.join(modifyDir, `before_site-${SITE_ID}_latest.json`), rawText, "utf-8"); const updatedPath = path.join(modifyDir, `site-${SITE_ID}_updated_${timestamp}.json`); fs.writeFileSync(updatedPath, JSON.stringify(body, null, 2), "utf-8"); console.log(`\n==== SiteId ${SITE_ID} (${SITE_NAME}) ====`); console.log("変更内容:"); for (const c of changed) { console.log(` - ${c.name}: ${JSON.stringify(c.before)} → ${JSON.stringify(c.after)}`); } console.log(`プレビュー保存先: ${updatedPath}`); if (!execute) { console.log("\n(--execute 未指定のためプレビューのみ。送信していません)"); return; } const url = `${server.BaseUrl}api/items/${SITE_ID}/updatesite`; console.log(`送信先: ${url}`); const res = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(body), }); const json = await res.json(); console.log(`[結果] HTTP ${res.status}:`, JSON.stringify(json)); const resultPath = path.join(modifyDir, `site-${SITE_ID}_result_${timestamp}.json`); fs.writeFileSync(resultPath, JSON.stringify(json, null, 2), "utf-8"); })();