UNPKG

@wishcbg/bobcode

Version:

基於店家同步功能的需求,讓店家能夠在不同的店家之間同步各項功能設定,並且能夠檢視各項功能的異動情況。 規劃出一套店家設定即程式碼的機制,讓店家能夠以 config file (.sac) 來定義各項功能設定,並且能夠還原店家各項功能設定。 暫且稱這個機制為「Settings as Code」「店家設定即程式碼」。

61 lines (60 loc) 2.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createApplyCommand = createApplyCommand; const commander_1 = require("commander"); const file_js_1 = require("../utils/file.js"); const applyHelper_js_1 = require("../utils/applyHelper.js"); function createApplyCommand() { const cmd = new commander_1.Command('apply'); cmd .description('將 change set 應用到目標店家並生成變更日誌') .requiredOption('--change-set <path>', 'change set (.cs.yaml) 檔案路徑') .requiredOption('--output <path>', '輸出變更日誌 (.cl.yaml) 檔案路徑') .requiredOption('--host <url>', 'API 主機 URL') .requiredOption('--token <token>', 'API 認證 Token') .requiredOption('--shop-id <id>', '目標店家 ID') .option('--concurrent <number>', '並行處理數量', '3') .option('--force-remove-unresolved-logic-ids', '強制刪除找不到的 logicId', false) .action(async (opts) => { try { // 讀取 change set const changeSet = (0, file_js_1.readChangeSet)(opts.changeSet); console.log(`已載入 change set,包含 ${changeSet.changes.length} 個變更項目`); const maxConcurrent = parseInt(opts.concurrent, 10); // 執行變更操作 console.log('開始套用變更...'); const changeResults = []; // 分批處理變更項目,控制併發數量 // TODO 並行處理 // TODO 處理順序 create -> update -> delete for (let i = 0; i < changeSet.changes.length; i += 1) { const result = await (0, applyHelper_js_1.applyChange)(changeSet.changes[i], opts.host, opts.shopId, opts.token, opts.forceRemoveUnresolvedLogicIds); changeResults.push(result); // 顯示進度 console.log(`處理進度: ${i + 1}/${changeSet.changes.length}`); } // 生成變更日誌 const changeLog = { version: changeSet.version, scopePrefix: changeSet.scopePrefix, changes: changeResults }; // 寫入變更日誌 (0, file_js_1.writeChangeLog)(opts.output, changeLog); // 計算成功與失敗數量 const successCount = changeResults.filter(r => r.status === 'success').length; const failCount = changeResults.filter(r => r.status === 'failed').length; console.log('變更套用完成:'); console.log(`- 成功: ${successCount} 個`); console.log(`- 失敗: ${failCount} 個`); if (failCount > 0) { console.log('查看變更日誌以了解失敗詳情'); } } catch (error) { console.error('套用變更時發生錯誤:', error); process.exit(1); } }); return cmd; }