feat(yedek): JSON tam hane yedeği backend (önizleme, geri yükleme, geri dönüş noktaları)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -66,6 +66,7 @@ Renkler ve ikonlar frontend tasarım token'larında.
|
||||
budget_split_pct: { needs: 50, wants: 30, culture: 10, unexpected: 10 },
|
||||
budget_suggestion: "previous" | "avg3" | "default" // varsayılan öneri yöntemi
|
||||
},
|
||||
last_backup_at, // son JSON dışa aktarma ("son yedek X gün önce")
|
||||
created_at, updated_at, deleted_at, version }
|
||||
```
|
||||
- `household_id` = `_id` (ortak `scope()` filtresi tüm koleksiyonlarda aynı çalışsın diye).
|
||||
@@ -202,6 +203,30 @@ Renkler ve ikonlar frontend tasarım token'larında.
|
||||
- Otomatik kurlar gün başına tek kayıt (kod × kaynak × gün; aynı gün yeniden çekilince güncellenir) → günlük geçmiş birikir. TCMB `rate_date` = bülten tarihi; altın = Türkiye'de bugün.
|
||||
- Altın: xaus.com gram (saf) USD × TCMB USD alış; çeyrek/yarım/tam = has gram (1,603 / 3,206 / 6,412) × gram, ons = 31,1034768 gr. İşçilik payı yok → gerekirse manuel.
|
||||
|
||||
### 3.14a `restore_points` — JSON geri yüklemeden önceki durum ("geri al")
|
||||
```js
|
||||
{ _id, household_id, created_at, created_by,
|
||||
reason: "before_restore" | "before_undo",
|
||||
counts: { periods: 3, entries: 412, ... }, // o anki silinmemiş kayıt sayıları
|
||||
size, // sıkıştırılmış bayt
|
||||
data: BinData } // gzip(JSON yedek dosyası)
|
||||
```
|
||||
- Her geri yükleme / geri alma öncesinde aynı transaction içinde yazılır. Son **3** nokta, en fazla **30 gün** (`backup::prune`). Hane verisi değil → yedeğe girmez.
|
||||
|
||||
### 3.14b JSON yedek dosyası (`services/backup.rs`)
|
||||
```js
|
||||
{ "format": "kakeibo-backup", "format_version": 1, "schema_version": 3, "app_version": "0.1.0",
|
||||
"exported_at": "2026-11-13T17:22:00Z",
|
||||
"household": { "id", "name", "settings" },
|
||||
"counts": { "entries": 412, ... }, // silinmemiş
|
||||
"checksum": "sha256:…", // household + data, anahtarlar sıralı
|
||||
"data": { "periods": [ {…}, … ], "entries": [ … ], … } } // her kayıt bir satır
|
||||
```
|
||||
- İçerik: dönem, plan kalemi, bütçe, harcama, devir, not, kategori, ödeme türü, varlık, varlık işlemi, elle girilen kur, ekstre kuralı — **silinmiş işaretliler dahil** (referanslar kopmasın, "geri al" birebir olsun). Kullanıcı, şifre, oturum, davet, otomatik kur **yok**.
|
||||
- Değerler: UUID `{"$uuid": "…"}`, zaman `{"$date": "…"}`, tam sayılar `i64` (`version`, `sort_order` ve ayarlar `i32`).
|
||||
- Geri yükleme = **tam değiştirme** (birleştirme yok), tek transaction. Aynı hane → kimlikler korunur; başka hane → tüm `_id`'ler yeniden üretilir, `*_id` referansları çevrilir, `household_id` hedef hane, `*_by` hanede yoksa geri yükleyen kişi. Hane adı yalnız aynı hanede geri gelir; ayarlar her zaman.
|
||||
- Sürüm: `format_version`/`schema_version` daha yeniyse reddedilir; eskiyse hane düzeyi yükseltmeler uygulanır (v<2 → varsayılan varlıklar).
|
||||
|
||||
### 3.15 `schema_migrations`
|
||||
```js
|
||||
{ _id: 1 /* sürüm numarası */, name: "initial", applied_at }
|
||||
|
||||
Reference in New Issue
Block a user