@wishcbg/bobcode
Version:
基於店家同步功能的需求,讓店家能夠在不同的店家之間同步各項功能設定,並且能夠檢視各項功能的異動情況。 規劃出一套店家設定即程式碼的機制,讓店家能夠以 config file (.sac) 來定義各項功能設定,並且能夠還原店家各項功能設定。 暫且稱這個機制為「Settings as Code」「店家設定即程式碼」。
61 lines (60 loc) • 2.96 kB
JavaScript
;
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;
}