Implement contract v2 on the watch: accounts, rates, base currency, ledgers
- Sync and store accounts, transfers, rates and the baseCurrency setting; keep recurring, goal, debt and attachment records as raw payloads. - Skip unknown entities on pull; preserve unknown payload fields of transactions, categories and budgets and send them back on re-save. - Compute balances in integer cents: total balance, analytics and budgets in the base currency, per-account balances in the account currency, "нет курса C→B" warning when a rate is missing. - Read-only accounts screen and an optional account picker when adding a transaction (currency follows the account). - Shared ledgers: choose personal or shared in settings, join by code, separate SwiftData store, cursor and deletion journal per ledger, X-Balance-Ledger header on sync. - Hide v2 features and do not push new entities when GET /v1/capabilities returns 404. - Keep the wire id of records (lowercase UUID for new ones) so edits of records created by other clients do not create duplicates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
29a4664401
commit
0ccb7e1861
17 files changed
+1267
-103
No files matched your search
@@ -14,12 +14,13 @@
|
||||
```text
|
||||
BalanceWatch/
|
||||
├── branding/ # аватар и баннер для README (PNG + SVG-исходники)
|
||||
├── docs/CONTRACT_V2.md # общий контракт экосистемы v2 (копия, одинаковая во всех репозиториях)
|
||||
├── BalanceWatch.xcodeproj/
|
||||
└── BalanceWatch/
|
||||
├── App/ # точка входа и экраны часов
|
||||
├── Models/ # SwiftData-модели (копия из монорепы)
|
||||
├── Shared/ # контейнер SwiftData, тема, ServerSync
|
||||
├── Utilities/ # FinanceCalculations, форматирование валют
|
||||
├── Utilities/ # FinanceCalculations, Money (сотые, курсы), форматирование валют
|
||||
├── Views/Components/ # CategoryIconView
|
||||
└── Assets.xcassets # иконка приложения
|
||||
```
|
||||
@@ -28,6 +29,24 @@ BalanceWatch/
|
||||
любой `.swift`-файл, положенный в `BalanceWatch/`, автоматически попадает в
|
||||
таргет — править `project.pbxproj` вручную не нужно.
|
||||
|
||||
## Контракт v2
|
||||
|
||||
Часы реализуют клиентскую часть `docs/CONTRACT_V2.md` в компактном виде:
|
||||
|
||||
- синхронизируются и хранятся счета, переводы, курсы и настройка
|
||||
`baseCurrency`; общий баланс, аналитика и бюджеты считаются в базовой
|
||||
валюте, при отсутствии курса показывается «нет курса C→B»;
|
||||
- экран «Счета» (только чтение) с балансами счетов и «Без счёта»; при
|
||||
добавлении операции можно выбрать счёт, валюта следует за счётом;
|
||||
- общие бюджеты: в «Настройки → Сервер → Бюджет» выбирается личное или общее
|
||||
пространство, можно присоединиться по коду; данные каждого пространства
|
||||
лежат в отдельном хранилище;
|
||||
- регулярные операции, цели, долги, вложения и теги хранятся и не теряются
|
||||
при пересохранении, но интерфейса для них нет; регулярные операции часы не
|
||||
создают;
|
||||
- если `GET /v1/capabilities` отвечает 404 (сервер v1), счета и общие
|
||||
бюджеты скрыты, новые сущности не отправляются.
|
||||
|
||||
## Сборка
|
||||
|
||||
1. Открыть `BalanceWatch.xcodeproj` в Xcode 16 или новее.
|
||||
|
||||
Reference in new issue
Block a user