[h1-request] 同期v2: 識別子(UUIDv4受け入れ)と端末の系列コード #58
Labels
No labels
h1-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
joe/o2#58
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
h1 の各テーブルの主キーは既に UUIDv4。v2 では主キーをそのまま集約 uuid として送る(別途 UUIDv7 を発行して対応表で管理する方式をやめる)。また伝票番号の端末間衝突を防ぐため、端末ごとの系列コードを番号に埋め込む。
依頼内容(ADR-0002 §3・§10)
POST /api/sync/peersの応答にseries_code(テナント内一意・英大文字1〜2文字)を追加。同一端末の再登録では同じコードを返す受け入れ条件
契約の正本: ADR-0002(ブランチ
docs/adr-0002-offline-first-sync-v2。未マージなら先に main へマージしてから着手)https://git.cyberius.biz/joe/o2/src/branch/docs/adr-0002-offline-first-sync-v2/docs/adr/0002-offline-first-sync-v2.md
h1 側の内部設計(参考): https://git.cyberius.biz/joe/h1-c2/src/branch/main/docs/superpowers/specs/2026-10-09-offline-first-sync-design.md
前提: h1 は本体単体で完全稼働し、o2 接続時のみ同期する。v1(
/api/sync/push|pull・/api/sync/corrections*)は h1 の移行完了まで並行稼働を維持すること(v1 を壊さない)。検証データ: 入出力例を
tests/fixtures/sync_v2/*.jsonに追加する。h1 は同じ fixture を Dart テストで検証する(sales_calculationfixture と同じ運用)。実装完了(o2側)— 識別子(UUIDv4 受け入れ)と端末の系列コード
実装
uuidは UUIDv4 / UUIDv7 を両方受理(既存 UUIDv7 は書き換えない)。UUID形式を意図した不正値のみrejected_invalid_uuidSyncPeer.series_codeを追加。テナント内で一意な英大文字1〜2文字を採番(A..Z→AA,AB…)device_id)では同じseries_codeを返す(新規払い出ししない)。POST /api/sync/peers応答・GET /api/sync/peers一覧に含めるc1d2e3f4a5b6(既存端末へバックフィル)、fixtures(push_uuid_v4)インフラ注意: 現在リモートへの git push が SSH タイムアウト(
www.cyberius.biz:18)で失敗中。実装はローカル main にマージ済み・o2.db適用済みで、push は回復後に実施します。回帰確認: 全 6422 passed, 1 skipped。