d6136959b1
- Kayıt: kullanıcı + hane + örnek kategori/ödeme türü tek transaction'da - Giriş: beni hatırla (30 gün / oturum), e-posta başına deneme sınırı - AuthUser extractor: cookie'deki JWT'yi doğrular - ValidJson: JSON + doğrulama, Türkçe hata mesajları - api.http: auth istekleri eklendi - Birim testleri: şifre, JWT, deneme sınırı, seed (11 test) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.3 KiB
4.3 KiB
🧠 Proje Hafızası
▶️ Sıradaki Adım
Faz 1 – Adım 4: Hane izolasyonu (AuthUser'ın tüm hane route'larında zorunlu kullanımı, scope()), üye davet kodu: POST /api/household/invites (yalnızca owner), POST /api/auth/register ile invite_code → mevcut haneye member olarak katılma; GET /api/household üye listesi.
📌 Alınan Kararlar
- Sürüm kontrolü: Gitea (
https://gitea.ta1sph.info/suphicakir/kakeibo.git), dalmain. - Her adım sonunda Claude commit atar ve haber verir; push'u kullanıcı kendi uygulamasıyla yapar (Claude
git pushçalıştırmaz). - Node v26 (LTS) sistemde mevcut; ayrı kurulum gerekmedi.
- 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), tarihYYYY-MM-DDmetin, 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 alanlarmodels/common.rsyardımcılarıyla (new_meta,scope,touch). Modeller ilgili adımda eklenir. households.household_id = _id(scope filtresi her yerde aynı).- Auth: JWT (HS256, jsonwebtoken
rust_crypto)kakeibo_sessioncookie'de; HttpOnly, SameSite=Lax, Secure yalnızca APP_URL https ise. Beni hatırla → 30 gün Max-Age; değilse 12 saat JWT + oturum cookie'si. Kayıttan sonra 30 gün. - Giriş sınırı: e-posta başına 15 dk'da 5 hatalı deneme (bellek içi,
auth/limiter.rs). Olmayan kullanıcıda da sahte argon2 doğrulaması (zamanlama sızıntısı yok). - Hata kodları:
{error:{code,message}};invalid_credentials,unauthorized,bad_request,conflict,too_many_requests. - Sürümler: Rust 1.99.1 (edition 2024), Axum 0.8, React 19, Vite 8, TypeScript 7.
❓ Açık Konular
- Kapalı dönem yeniden açılırken başka açık dönem varsa davranış (Faz 6).
- Altın kuru için veri kaynağı seçimi (Faz 8).
- Aylık değerlendirme çıktı formatı kullanıcıdan gelecek (Faz 9).
- Canlı MongoDB kurulum şekli (konteyner mi, doğrudan mı) Faz 3'te birlikte kontrol edilecek.
📝 İlerleme Günlüğü
2026-11-11 — Faz 0
- Adım 1: Ortam kontrol edildi. CachyOS, fish. Node 26, npm 12, Docker 29 + Compose 5, Git, VS Code, gcc mevcut. Rust ve cargo-watch eksik; kurulum komutları verildi.
- Adım 2:
.vscode/(extensions, settings, tasks, launch),.gitignore,.env.exampleve monorepo klasörleri oluşturuldu.git init -b main. - Adım 3:
CLAUDE.md,docs/MEMORY.md,docs/PHASES.mdoluşturuldu. Gitea remote eklendi, ilk commit push edildi. - Adım 4: Rust kuruldu.
docker-compose.dev.yml(mongo:7, rs0, healthcheck ile otomatikrs.initiate). Backend: Axum, yalnızcaGET /api/health. Frontend: Vite react-ts şablonu,/apiproxy → 8080, geçici durum ekranı. Kökpackage.json: concurrently ilenpm run dev. Uçtan uca test edildi (Mongo PRIMARY, proxy çalışıyor). - Adım 5:
docs/DATA_MODEL.mdhazırlandı ve onaylandı. Faz 0 tamamlandı.
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ü:colsabitleri,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ıştadb::prepare. 4 birim testi; idempotency ve tek açık dönem indeksi elle doğrulandı.uuid(v7) eklendi. - Adım 3: Kimlik doğrulama:
auth/(password argon2id + spawn_blocking, jwt, limiter, session cookie +AuthUserextractor),extract.rs(ValidJson= JSON + validator, Türkçe 400),services/account.rs(kayıt tek transaction: hane + owner + 13 kategori + 4 ödeme türü),services/seed.rs,routes/auth.rs(register/login/logout/me). Yeni crate'ler: argon2, jsonwebtoken, axum-extra(cookie), validator, time. 11 birim testi; 13 senaryo curl ile, rollback DB'de doğrulandı.