Files
butcem/CHANGELOG.md
T
2026-11-05 03:23:30 +03:00

13 KiB
Raw Blame History

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 6b: işlemler

  • İşlemler (/islemler): gelir, gider ve transfer (hesap ↔ hesap). Tutar her zaman pozitif; işaret türden gelir. Hesap bakiyeleri artık açılış bakiyesi + gerçekleşmiş işlemlerden hesaplanır (tek doğruluk kaynağı: işlemler).
  • Bölünmüş işlem: en az 2 kalem, kalemler toplamı = tutar (istemci ve sunucuda aynı zod şeması); kalan tutar göstergesi, "kalanı son kaleme ekle"; listede tek satır, ayrıntıda kalemler.
  • Akıllı giriş: satıcı önerileri (Türkçe normalize arama, kullanım sıklığı) ve satıcının son kullanılan kategori/hesabı; işlemi kopyalama.
  • Liste: güne göre gruplama ve günlük net, gelir/gider/net özetleri, sayfalama; filtreler (tarih aralığı İstanbul gününe göre, tür, durum, hesap — transfer hedefi dahil, kategori — alt kategoriler ve bölünmüş kalemler dahil, ekleyen kişi, tutar aralığı, etiket, metin arama); filtreler URL'de.
  • İşlem ayrıntısı, düzenleme ve yumuşak silme; silme bildiriminde "Geri al".
  • CSV dışa aktarma (/islemler/disa-aktar): listedeki filtrelerle, bölünmüş işlem kalem başına satır; Türkçe Excel uyumlu (noktalı virgül, ondalık virgül, UTF-8 BOM), formül enjeksiyonu koruması.
  • Hızlı ekle her ekrandan doğrudan işlem formunu açar (gider/gelir/transfer sekmeleri).
  • Gizlilik: başkasının "yalnızca ben" hesabına dokunan işlemler listede, ayrıntıda ve CSV'de görünmez; o hesaba yalnızca sahibi işlem girer.
  • Seed: son 6 ayın 221 gerçekçi işlemi (faker.seed(42); maaş, kira, faturalar — kışın doğalgaz yüksek, market — bir kısmı bölünmüş, yakıt, kafe, kart ödemesi, birikim, nakit çekme), satıcı kuralları; idempotent (seedRef).
  • 003 migration'ı: transactions ve payees index'leri. Denetim kaydı: işlem silme/geri alma.
  • Testler: bakiye tutarlılığı (bağımsız doğrulama dahil), izolasyon, gizli hesap, arşivli kategori, filtreler, satıcı kuralları, CSV.

Değişti

  • npm run typecheck önce route tiplerini üretir (next typegen).

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 002 migration'ı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.hh cookie'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, uygulananlar migrations koleksiyonunda; 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) ve householdMembers (benzersiz {householdId, userId} index'i).
  • SEED_USER_PASSWORD ortam 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=Lax cookie.
  • 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 .invalid yer 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/health veritabanı 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 icons SVG 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-TR küçü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, --warning değ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ı.
  • ActionResult sonuç tipi (Faz 3 Server Action sözleşmesi).

Değişti

  • use-mobile hook'u useSyncExternalStore ile 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.ts arayü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/uploads volume, 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, seed scriptleri.
  • docs/PROMPT.md (ana prompt ve Faz 0 kararları), README.md, CHANGELOG.md.