GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。 NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは 別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
88 lines
3.2 KiB
JavaScript
88 lines
3.2 KiB
JavaScript
"use strict";
|
||
/*
|
||
* マスタテーブル(SiteId=1相当)へ、新規Description062("LINEWORKS所属組織")を追加する。
|
||
* 既存Columnsはそのまま維持し、末尾に1件追記する(Columns配列は完全上書きのため、既存分を
|
||
* 含めて送信する必要がある。add-existence-flag-fields.jsと同じパターン)。
|
||
* プリザンターGroups機能(Class035)は今後使わない方針(2026-08-13、ユーザー確定)。
|
||
* 既定はドライラン。実際に送信するには --execute を付ける。
|
||
*
|
||
* 実行: node scripts/add-org-units-field.js [--execute]
|
||
*/
|
||
const { getSite: fetchSite } = require("../src/lib/pleasanterClient");
|
||
const { saveSiteSnapshot } = require("../src/lib/siteConfigStore");
|
||
|
||
const BASE_URL = process.env.PLEASANTER_BASE_URL;
|
||
const API_KEY = process.env.PLEASANTER_API_KEY;
|
||
const SITE_ID = process.env.PLEASANTER_MASTER_SITE_ID;
|
||
|
||
if (!BASE_URL || !API_KEY || !SITE_ID) {
|
||
console.error("PLEASANTER_BASE_URL / PLEASANTER_API_KEY / PLEASANTER_MASTER_SITE_ID が未設定");
|
||
process.exit(1);
|
||
}
|
||
|
||
const NEW_COLUMNS = [
|
||
{ ColumnName: "Description062", LabelText: "LINEWORKS所属組織" },
|
||
];
|
||
|
||
async function getSite() {
|
||
const data = await fetchSite({ baseUrl: BASE_URL, apiKey: API_KEY, siteId: SITE_ID });
|
||
saveSiteSnapshot(SITE_ID, data);
|
||
return data;
|
||
}
|
||
|
||
async function updateSite(body) {
|
||
const res = await fetch(`${BASE_URL.replace(/\/$/, "")}/api/items/${SITE_ID}/updatesite`, {
|
||
method: "POST",
|
||
headers: { "Content-Type": "application/json; charset=utf-8" },
|
||
body: JSON.stringify(body),
|
||
});
|
||
const data = await res.json();
|
||
if (!res.ok || data.StatusCode !== 200) {
|
||
throw new Error(`updatesite failed: ${res.status} ${JSON.stringify(data)}`);
|
||
}
|
||
return data;
|
||
}
|
||
|
||
async function main() {
|
||
const execute = process.argv.includes("--execute");
|
||
const current = await getSite();
|
||
const currentColumns = (current.SiteSettings && current.SiteSettings.Columns) || [];
|
||
const alreadyExists = currentColumns.some((c) => c.ColumnName === "Description062");
|
||
if (alreadyExists) {
|
||
console.log("[SKIP] Description062は既にColumnsに存在します。二重追加を避けるため何もしません。");
|
||
return;
|
||
}
|
||
|
||
const mergedColumns = [...currentColumns, ...NEW_COLUMNS];
|
||
const body = {
|
||
ApiVersion: "1.1",
|
||
ApiKey: API_KEY,
|
||
ReferenceType: current.ReferenceType,
|
||
ParentId: current.ParentId,
|
||
InheritPermission: current.InheritPermission,
|
||
Permissions: current.Permissions,
|
||
SiteSettings: { ...current.SiteSettings, Columns: mergedColumns },
|
||
};
|
||
|
||
console.log(`接続先: ${BASE_URL} (SiteId=${SITE_ID})`);
|
||
console.log("--- 現状 → 希望 ---");
|
||
console.log(`既存Columns件数: ${currentColumns.length} -> ${mergedColumns.length}`);
|
||
console.log("追加するColumns:", JSON.stringify(NEW_COLUMNS, null, 2));
|
||
|
||
if (!execute) {
|
||
console.log("\n[ドライラン] --execute を付けずに実行したため送信していません。");
|
||
return;
|
||
}
|
||
|
||
const result = await updateSite(body);
|
||
console.log("\n[OK] 送信結果:", JSON.stringify(result));
|
||
|
||
await getSite();
|
||
console.log(`[OK] 反映後の状態をconfigs/${SITE_ID}/latest.jsonへ保存`);
|
||
}
|
||
|
||
main().catch((e) => {
|
||
console.error(e);
|
||
process.exit(1);
|
||
});
|