Skip to content

[feature] 整合每日自動同步(Cron Trigger,台北 06:00) - #74

Merged
YJack0000 merged 2 commits into
mainfrom
claude/integration-autosync
Sep 28, 2026
Merged

YJack0000 merged 2 commits into
mainfrom
claude/integration-autosync

Conversation

@YJack0000

Copy link
Copy Markdown
Contributor

每天台北 06:00 自動同步所有已開啟且連線中的整合,不用再手動按同步。

  • Cron:wrangler.jsonc 加 triggers.crons = ["0 22 * * *"];新的 worker.ts 照 OpenNext custom worker 做法包住 .open-next/worker.js,加上 scheduled。
  • scheduled 不直接 import 業務程式碼,而是在同一個 isolate 以函式呼叫 OpenNext fetch 打內部路由 /api/cron/integrations-autosync,用一次性 token(只在記憶體、用完即刪)驗證;外部請求一律 404。
  • 同步內容:Simpany 近 90 天發票+今年薪資申報(1 月含去年)、Wise 對帳單寫入(去重、不早於切換日、標待確認)。依序執行、各自 try/catch,互不影響。不開立、不作廢發票,不呼叫 Simpany 任何寫入端點。
  • 設定 › 整合:每個整合的「自動同步」開關(預設開)、上次自動同步結果、「立即執行自動同步」按鈕;MCP run_integration_sync、list_integrations 帶 autoSync / lastAutoSync(server 1.8.0)。
  • 自動執行的活動紀錄用新的 channel system(migration 0028),不冒用任何使用者。
  • i18n:runAsSystem 內用 zh-TW createTranslator,網頁與 MCP 行為不變。

部署:migration 0028 已套用到 prod(先在 prod 分支演練)。

驗證:tsc、lint、build、cf:build 通過,bundle 匯出 scheduled。

- wrangler.jsonc:triggers.crons "0 22 * * *";main 改指向自訂 worker.ts
  (轉發 OpenNext fetch + 新增 scheduled,並轉出 OpenNext 的 DO class)
- scheduled 以同 isolate 的函式呼叫打內部 route /api/cron/integrations-autosync,
  一次性 token 驗證(src/lib/cron-token.ts),env 由 OpenNext 照常填入 process.env
- src/lib/integrations/autosync.ts:runScheduledSync,逐一、隔離地跑
  Simpany(90 天發票 + 薪資申報,一月含去年)與 Wise(dryRun: false),
  結果寫 config.lastAutoSync,操作紀錄 channel = system(migration 0028)
- i18n:getServerT / runAsSystem,沒有 request 時用 zh-TW 字典;store.ts 改用
- 設定 › 整合:每列「自動同步」開關、上次自動同步結果、「立即執行自動同步」
- MCP:list_integrations 加 autoSync / lastAutoSync,新增 run_integration_sync,
  SERVER_VERSION 1.8.0
- docs:integrations.md 每日自動同步、deployment.md 自訂 worker 與 Cron Trigger
@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

✅ SonarQube Quality Gate passed — pathorsAI_internal

0 open issues on this PR.

@YJack0000
YJack0000 merged commit 57b568a into main Sep 28, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants