feat(backend): migration mekanizması, indeksler ve ortak model yardımcıları
- db/migrations.rs: schema_migrations ile sürümlü migration (v1: koleksiyonlar) - db/indexes.rs: DATA_MODEL indeksleri + senkronizasyon indeksi, açılışta otomatik - models/common.rs: UUID v7, ortak alanlar, hane kapsamlı filtre - Birim testleri (4) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+2
-1
@@ -60,7 +60,7 @@ Renkler ve ikonlar frontend tasarım token'larında.
|
||||
|
||||
### 3.2 `households`
|
||||
```js
|
||||
{ _id, name, owner_id,
|
||||
{ _id, household_id /* = _id */, name, owner_id,
|
||||
settings: {
|
||||
currency: "TRY",
|
||||
budget_split_pct: { needs: 50, wants: 30, culture: 10, unexpected: 10 },
|
||||
@@ -68,6 +68,7 @@ Renkler ve ikonlar frontend tasarım token'larında.
|
||||
},
|
||||
created_at, updated_at, deleted_at, version }
|
||||
```
|
||||
- `household_id` = `_id` (ortak `scope()` filtresi tüm koleksiyonlarda aynı çalışsın diye).
|
||||
- Prompttaki `settings` koleksiyonu yerine **haneye gömülü** (her hanede tek kayıt olduğu için ayrı koleksiyona gerek yok).
|
||||
|
||||
### 3.3 `invites`
|
||||
|
||||
+4
-1
@@ -1,7 +1,7 @@
|
||||
# 🧠 Proje Hafızası
|
||||
|
||||
## ▶️ Sıradaki Adım
|
||||
**Faz 1 – Adım 2:** Ortak model alanları (UUID v7, zaman damgaları, version), `schema_migrations` ile migration mekanizması, `DATA_MODEL.md` §4 indeksleri (açılışta otomatik).
|
||||
**Faz 1 – Adım 3:** Kimlik doğrulama: `POST /api/auth/register` (kullanıcı + hane + örnek kategori/ödeme türü, transaction), `login`, `logout`, `GET /api/auth/me`; argon2, JWT httpOnly cookie, giriş rate limit.
|
||||
|
||||
## 📌 Alınan Kararlar
|
||||
- Sürüm kontrolü: Gitea (`https://gitea.ta1sph.info/suphicakir/kakeibo.git`), dal `main`.
|
||||
@@ -11,6 +11,8 @@
|
||||
- Yerel MongoDB host portu 27020 (27017 sistem mongod, 27018/27019 başka projeler).
|
||||
- Frontend lint aracı: oxlint (Vite şablonu varsayılanı), ESLint yerine.
|
||||
- Veri modeli v1 onaylandı (2026-11-11): ölçekli tam sayı (`_e6`), tarih `YYYY-MM-DD` metin, dönem bitişi hariç, kullanıcı = tek hane, ayarlar haneye gömülü, haftalık bütçe hesaplanır.
|
||||
- Model yaklaşımı: `#[serde(flatten)]` yerine ortak alanlar `models/common.rs` yardımcılarıyla (`new_meta`, `scope`, `touch`). Modeller ilgili adımda eklenir.
|
||||
- `households.household_id = _id` (scope filtresi her yerde aynı).
|
||||
- Sürümler: Rust 1.99.1 (edition 2024), Axum 0.8, React 19, Vite 8, TypeScript 7.
|
||||
|
||||
## ❓ Açık Konular
|
||||
@@ -30,3 +32,4 @@
|
||||
|
||||
### 2026-11-11 — Faz 1
|
||||
- **Adım 1:** `config.rs` (env + doğrulama, JWT_SECRET ≥ 32), `db.rs` (5 sn timeout + ping), `error.rs` (`AppError` → `{error:{code,message}}` Türkçe; 5xx detayı yalnızca logda), `state.rs`, `routes/` (health: DB yoksa 503). Açılışta DB/ayar hatasında anlaşılır log + çıkış kodu 1. Elle test: 4 senaryo geçti.
|
||||
- **Adım 2:** `db/` modülü: `col` sabitleri, `migrations.rs` (`schema_migrations`, v1 = koleksiyonları oluştur), `indexes.rs` (DATA_MODEL §4 + tüm hane koleksiyonlarına `(household_id, updated_at)`). `models/common.rs`: UUID v7, `new_meta`, `scope`, `touch`. Açılışta `db::prepare`. 4 birim testi; idempotency ve tek açık dönem indeksi elle doğrulandı. `uuid` (v7) eklendi.
|
||||
|
||||
+2
-2
@@ -26,7 +26,7 @@
|
||||
|
||||
## Faz 1 Adımları
|
||||
- ✅ 1. `config.rs` + `db.rs` (MongoDB bağlantısı), Türkçe hata yapısı, health check'e DB durumu
|
||||
- 🔄 2. Modeller, migration mekanizması ve indeksler
|
||||
- ⏳ 3. Kimlik doğrulama: kayıt (+ hane + örnek kategori/ödeme türü), giriş, çıkış, `me`; argon2 + JWT cookie + rate limit
|
||||
- ✅ 2. Modeller, migration mekanizması ve indeksler
|
||||
- 🔄 3. Kimlik doğrulama: kayıt (+ hane + örnek kategori/ödeme türü), giriş, çıkış, `me`; argon2 + JWT cookie + rate limit
|
||||
- ⏳ 4. Hane izolasyonu (middleware), üye davet kodu
|
||||
- ⏳ 5. Kategori ve ödeme türü uç noktaları + hane izolasyonu testleri, `api.http`
|
||||
|
||||
Reference in New Issue
Block a user