904a969b18
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 KiB
11 KiB
Değişiklik Günlüğü
Bu projedeki tüm önemli değişiklikler bu dosyada belgelenir.
Biçim Keep a Changelog esas alınır ve proje Semantic Versioning kullanır.
Yayınlanmamış
Faz 6 (alt fazlar halinde; v0.6.0 Faz 6c sonunda).
Eklendi — Faz 6a: para, hesaplar ve kategoriler
shared/money.ts: Türkçe tutar ayrıştırma ("1.250,50"→ 125050 kuruş; binlik/ondalık kuralları belgeli),formatMoneyInput,sumMoney, kuruş kaybı olmadan oransal bölme (allocate,splitEvenly).shared/quantity.ts: miktarlar birimin binde biri tamsayı (1,5 kg→ 1500); ayrıştırma, biçimlendirme, kg↔g / lt↔ml dönüşümü.shared/dates.ts: İstanbul günü yardımcıları (gün başlangıcı, UTC → yerel gün).- Hesaplar (
/hesaplar): nakit, vadesiz banka (KMH limiti, aylık faiz, kesim günü), birikim, kredi kartı (limit, kesim günü, son ödeme kuralı, ödeme hesabı), yemek kartı (sağlayıcı); hesap sahibi kişi ve "yalnızca ben" (bakiyeyi yalnızca hesap sahibi görür, toplamlar hane ayarına uyar); renk/ikon, sıralama, arşiv. Varlık / kart borcu / net özet. - Kategoriler (
/kategoriler): gelir ve gider ağaçları (5 seviyeye kadar), ekleme, düzenleme, taşıma (alt ağaçla, transaction), sıralama, arşivleme (alt ağaçla); kardeşler arasında ad tekrarı engeli (Türkçe normalize). - Varsayılan Türkçe kategori seti (44 kategori): yeni hanede aynı transaction'da, mevcut hanelere
002migration'ıyla, idempotent (defaultKey). - Kategori ağacı saf fonksiyonları (
buildTree,toOptions,checkMove,rollupTotals…) ve birim testleri. - Renk paleti (13 renk, açık/koyu tema değişkenleri) ve ikon kayıt tablosu; ikon/renk seçiciler,
MoneyInput. - Seed: varsayılan kategoriler ve 7 örnek hesap (KMH'li banka, kredi kartı, birikim, "yalnızca ben" yemek kartı).
- Denetim kaydı: hesap oluşturma/düzenleme/arşiv, kategori taşıma/arşiv.
- Entegrasyon testleri: kategori ve hesap izolasyonu, roller, gizli bakiye, kart kuralları, ağaç kuralları.
0.5.0 - 2026-11-05
Faz 5: Haneler, hane içi roller ve veri izolasyonu.
Eklendi
- Hane içi roller (
viewer < member < owner) ve kuralları: son sahip düşürülemez veya çıkarılamaz. - DAL:
getHouseholdContext(istek başına tek okuma),requireActiveHousehold(minRole),getHouseholdActionContext(minRole),requireHouseholdMember(householdId, minRole). Sistem admini için hane verisinde ayrıcalık yok. - Hane servisi (
features/households/service.ts, framework'ten bağımsız): her hane kapsamlı fonksiyon üyeliği kendisi de doğrular; hane oluşturma + ilk sahip + denetim kaydı tek MongoDB transaction'ında. - Aktif hane seçici (üst bar): seçim sunucuda doğrulanır,
butcem.hhcookie'sine yazılır; geçersiz/uydurma cookie yok sayılır. Tercih yoksa en yüksek rolün olduğu hane açılır. /ayarlar: hane adı, bütçe ayı başlangıç günü, taksit modu, günlük plan dağıtımı, "yalnızca ben" hesaplarının toplamlara dahil edilmesi, ek mağaza tasarruf eşiği; üye rolleri ve üye çıkarma (yalnızca sahip; diğer roller salt okunur)./admin/haneler: hane oluşturma (ilk sahip seçerek), kullanıcıyı haneye ekleme, hane içi rol değiştirme, üye çıkarma./hane-yok: hiçbir haneye üye olmayan kullanıcılar için yönlendirme sayfası.- Denetim kaydı (
auditLogs): hane ayarları, üye ekleme/rol/çıkarma, hane oluşturma ve tüm admin kullanıcı işlemleri (oluşturma, düzenleme, rol, şifre sıfırlama, askı, silme). - Migration mekanizması:
npm run migrate,scripts/migrations/NNN-*.ts, uygulananlarmigrationskoleksiyonunda;001-initial-indexes. Seed önce migration'ları çalıştırır. - Veri izolasyonu entegrasyon testleri (başka hanenin üyeliği/ayrıntısı/ayarları, rol yetersizliği, uydurma ve enjeksiyon denemesi kimlikler, hanesi olmayan admin, çapraz hane üyelik değişikliği, son sahip, transaction).
Değişti
- İzleyici (viewer) rolünde Hızlı ekle gizlenir/pasifleşir.
- Kullanıcı silindiğinde tüm hane üyelikleri de temizlenir.
Kaldırıldı
- Hane mock verisi.
0.4.0 - 2026-11-05
Faz 4: Örnek test verisi.
Eklendi
- Seed (
npm run seed): admin + 7 örnek kullanıcı (biri askıda, biri hanesi olmayan ikinci admin, ikisi e-postasız ve kullanıcı adıyla giriş yapan), 2 hane ("Çakır Ailesi", "Annemler") ve hane içi roller (owner / member / viewer; bir kullanıcı iki hanede farklı rollerle). - Seed idempotenttir (kullanıcı adı, hane adı ve üyelik çiftine göre); kullanıcılar Better Auth API'siyle oluşturulur. Geliştirme hesapları konsolda tablo olarak gösterilir.
npm run seed:reset: kimlik doğrulama ve hane koleksiyonlarını temizleyip yeniden doldurur; production'da reddedilir. Production'da seed yalnızca admini oluşturur.- Mongoose modelleri:
households(ayarlar: bütçe ayı başlangıcı, taksit ve günlük plan tercihleri, özel hesaplar, ek mağaza eşiği) vehouseholdMembers(benzersiz{householdId, userId}index'i). SEED_USER_PASSWORDortam değişkeni (örnek kullanıcıların ortak geliştirme şifresi).- Seed entegrasyon testleri (idempotentlik, roller, askı, e-postasız giriş, reset).
0.3.0 - 2026-11-05
Faz 3: Backend — kimlik doğrulama, yetki katmanı ve güvenlik.
Eklendi
- Better Auth (MongoDB adaptörü, replica set transaction): e-posta veya kullanıcı adı ile giriş, kayıt (sign-up) kapalı, admin plugin, 30 günlük oturum,
HttpOnly/Secure/SameSite=Laxcookie. - Rate limit (veritabanında): genel 100 istek/dk, giriş denemeleri 5/dk.
- Data Access Layer (
lib/dal.ts):getCurrentUser(istek başına tek okuma),requireSession,requireRole,getActionUser. Askıdaki kullanıcının oturumu reddedilir. proxy.ts: iyimser oturum cookie kontrolü (oturumsuz →/login); asıl kontrol DAL'da.- Admin kullanıcı yönetimi Server Action'ları: oluşturma, düzenleme, rol, şifre sıfırlama (diğer oturumları kapatır), askıya alma/kaldırma, silme. Kendini silememe/askıya alamama ve son admini düşürememe sunucuda da uygulanır; Better Auth hataları Türkçe alan hatalarına çevrilir.
- E-postası olmayan kullanıcılar için
.invalidyer tutucu adres (arayüzde gizlenir). - MongoDB (
lib/db/mongo.ts) ve Mongoose (lib/db/mongoose.ts) bağlantıları (HMR güvenli tekil örnek, tembel oluşturma). - Güvenlik başlıkları: CSP (nonce'suz, Cache Components uyumlu),
X-Content-Type-Options,Referrer-Policy,X-Frame-Options,Permissions-Policy,Cross-Origin-Opener-Policy; production'da HSTS. GET /api/healthveritabanı ping'i; erişilemezse 503.npm run seed: ilk admini (SEED_ADMIN_*, kullanıcı adıadmin) idempotent olarak oluşturur.npm run test:integration: gerçek MongoDB'de (butcem_test) kimlik doğrulama sözleşmesi testleri (kayıt kapalı, giriş, askı, admin yetkisi, rate limit).- BÜTÇEM logosu ve ikon seti (
logo.svg,logo-dark.svg,icon.svg,icon-maskable.svg);npm run iconsSVG kaynaktan üretir.
Değişti
- Giriş, çıkış, dashboard ve admin sayfaları mock yerine gerçek oturum ve verilerle çalışır; oturuma bağlı kabuk Suspense içinde akış olarak gelir.
Düzeltildi
- Kullanıcı adı normalizasyonu:
tr-TRküçük harf dönüşümü "ADMIN"i "admın" yapıyordu; artık İ/I/ı → i ve ASCII küçük harf.
Kaldırıldı
- Oturum ve admin kullanıcı listesi mock verileri (hane mock'u Faz 5'e kadar duruyor).
0.2.0 - 2026-11-05
Faz 2: Frontend iskeleti (veriler Faz 3'e kadar mock).
Eklendi
- Marka paleti: mavi/beyaz oklch tema (açık), lacivert/açık mavi (koyu); anlamsal
--income,--expense,--budget,--warningdeğişkenleri ve grafik renkleri. - Açık / Koyu / Sistem tema (next-themes) ve her ekranda tema seçici.
- Giriş ekranı (
/login): kullanıcı adı veya e-posta + şifre, zod doğrulama, şifre göster/gizle, yükleniyor durumu; kayıt bağlantısı yok./her zaman/login'e yönlenir. - Uygulama kabuğu: masaüstünde daraltılabilir yan menü, mobilde alt gezinme çubuğu (ortada Hızlı ekle, "Daha fazla" ile menü), üst bar (hane seçici, Hızlı ekle, tema, kullanıcı menüsü: ad, rol, sürüm, Çıkış yap). Henüz gelmeyen sayfalar "Yakında" olarak pasif.
- Hızlı ekle (gider / gelir / transfer) seçimi; mobilde alttan açılan Drawer, masaüstünde Dialog (
ResponsiveDialog). - Dashboard: karşılama ve özet kartları (Suspense + Skeleton).
- Admin kullanıcı yönetimi (
/admin/kullanicilar): TanStack Table v9 ile Türkçe duyarlı arama, sıralama, sayfalama; oluşturma, düzenleme, rol değiştirme, şifre sıfırlama, askıya alma/kaldırma, silme (onaylı). Kendini silememe ve son admini düşürememe kuralları (checkAdminAction). - Paylaşılan zod şemaları (
src/shared/schemas: giriş, kullanıcı, şifre, askı), Türkçe arama/sıralama (foldTr,compareTr), TL ve İstanbul saatli tarih biçimleri (formatMoney,formatDate). - PWA temeli:
manifest.webmanifest, tema rengi, Apple web app meta, ikonlar. npm run icons:public/brand/icon.png'den favicon.ico, uygulama, Apple ve maskable PWA ikonları üretir (sharp).- Yer tutucu marka dosyaları (
public/brand/logo.svg,logo-dark.svg,icon.png). - 404, hata (
retry) ve global hata sayfaları; yükleniyor ekranları. ActionResultsonuç tipi (Faz 3 Server Action sözleşmesi).
Değişti
use-mobilehook'uuseSyncExternalStoreile yeniden yazıldı (effect içinde setState yok, hydration güvenli).- ESLint:
_önekli bilinçli kullanılmayan değişkenlere izin.
0.1.0 - 2026-11-05
Faz 1: Framework, klasör yapısı ve altyapı.
Eklendi
- Next.js 16.4 (App Router, Turbopack, Cache Components), React 19.3, TypeScript strict (
noUncheckedIndexedAccess), Tailwind CSS 4. - shadcn/ui (Radix, Nova preset) başlangıç yapılandırması.
- Bağımlılıklar: Better Auth, MongoDB sürücüsü 7.7 (Mongoose ile ortak), Mongoose 9, zod 4, react-hook-form, next-themes, sonner, TanStack Table.
src/tabanlı klasör yapısı (features,shared,models,lib/db,lib/storage,i18n,scripts/migrations).- zod ile doğrulanan
env.ts(tembel doğrulama, build sırasında sır gerektirmez) ve birim testleri. src/i18n/tr.tsarayüz metinleri dosyası.- Lokal MongoDB 9 tek düğümlü replica set (
docker-compose.yml,rs0, otomatik başlatma, PRIMARY healthcheck, host portu 27019). - Çok aşamalı
Dockerfile(standalone çıktı, root olmayan kullanıcı,/app/uploadsvolume, HEALTHCHECK) ve.dockerignore. - Geçici
GET /api/health(sürüm ve commit bilgisi). - Vitest, Prettier (Tailwind eklentisi), EditorConfig, VSCode önerilen eklentiler.
.nvmrc(Node 26),engines.node,typecheck,test,format,db:up,seedscriptleri.docs/PROMPT.md(ana prompt ve Faz 0 kararları),README.md,CHANGELOG.md.