docs(plan): complete backend phases 5 and 6
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# Faz 5 — Freelancer backend geçişi
|
||||
|
||||
Tarih: 2026-07-16
|
||||
|
||||
## Kapsam
|
||||
|
||||
Bu faz mevcut freelancer ekranlarını yeniden tasarlamadan, çekirdek veri okuma ve mutation akışlarını Supabase'ten Better Auth + SQLite + Drizzle domain katmanına taşır.
|
||||
|
||||
Faz 5 kapsamı:
|
||||
|
||||
- profil, avatar, şifre ve AI tercih kaydı;
|
||||
- müşteri listesi, CRM pipeline, detay ve aktiviteler;
|
||||
- proje, planning section, yerel kapak dosyası, revizyon durumu ve proje ayarları;
|
||||
- görev, takvim, finans ve günlük CRUD akışları;
|
||||
- dashboard ve analytics tarih aralıklı aggregate'leri.
|
||||
|
||||
Portal sayfaları Faz 6'ya; chat, AI analiz route'ları ve business sayfaları Faz 7'ye aittir. Supabase import/cutover ve paketlerin fiziksel olarak kaldırılması Faz 8 kapsamındadır.
|
||||
|
||||
## Runtime envanteri ve yeni karşılıklar
|
||||
|
||||
| Modül | Eski runtime kaynağı | Yeni backend sınırı |
|
||||
| --- | --- | --- |
|
||||
| Ayarlar | Supabase Auth, `profiles`, `app_settings`, Storage | Better Auth API, `app_profiles`, local file service, encrypted `user_ai_settings` |
|
||||
| Müşteriler | `clients`, `client_activities`, ilişkili tablo sorguları | `DomainService` + owner-scoped repository + server-side özetler |
|
||||
| Projeler | `projects`, `project_planning_sections`, Supabase Storage | Domain service + local project asset + `/api/files/:id` |
|
||||
| Görevler | `tasks` ve browser tarafı filtre/kanban | Domain service mutation'ları; mevcut filtre/kanban UI korunur |
|
||||
| Takvim | `calendar_events` ve Supabase join'leri | Domain service + server-side relation map |
|
||||
| Finans | decimal `finance_transactions` | integer minor unit + adapter'da kontrollü decimal dönüşüm |
|
||||
| Günlük | `daily_logs` upsert/update | `journal_entries`, owner+tarih tekilliği |
|
||||
| Dashboard | `get_dashboard_metrics` RPC | tarih aralıklı repository sorguları + domain aggregate |
|
||||
| Analytics | `get_analytics_metrics` RPC | SQLite task status ve proje geliri aggregate'leri |
|
||||
|
||||
## Uygulanan kurallar
|
||||
|
||||
- Server Component ve Server Action'lar `requireFreelancerBackend()` ile Better Auth session'ından actor üretir.
|
||||
- Owner kimliği formdan veya query'den alınmaz.
|
||||
- Form verileri merkezi adapter yardımcılarıyla temizlenir; son domain validation Zod schema'larında yapılır.
|
||||
- Update schema'ları create default'larından ayrı patch sözleşmeleridir; kısmi güncelleme status, pipeline, visibility, currency veya progress mode alanlarını sessizce varsayılana döndüremez.
|
||||
- Müşteri/proje/görev ilişkileri service katmanında doğrulanır. UI yalnızca proje seçtiğinde adapter eksik client bağını owned project'ten türetir.
|
||||
- Para verileri SQLite'ta minor unit olarak kalır; mevcut UI sözleşmesine girerken ve formdan çıkarken 100 tabanlı dönüşüm yapılır.
|
||||
- Avatar ve proje kapağı yerel file service'in MIME, boyut, magic-byte, scope ve path politikalarından geçer.
|
||||
- AI API key ayar ekranına geri okunmaz ve `localStorage`'a yazılmaz. Key AES-256-GCM ile server-side şifrelenir; runtime AI entegrasyonu Faz 7'de bu service'e bağlanacaktır.
|
||||
- Dashboard tarih aralığı allowlist ile doğrulanır; RPC yerine owner-scoped SQLite sorguları kullanılır.
|
||||
|
||||
## Migration
|
||||
|
||||
`0005_brief_black_bolt.sql`, owner'a bire bir bağlı `user_ai_settings` tablosunu ekler. Provider allowlist'i database CHECK constraint'iyle de korunur. API key alanında yalnızca şifreli payload saklanır.
|
||||
|
||||
## Doğrulama
|
||||
|
||||
- `pnpm phase5:backend-boundary`: 31 Faz 5 runtime dosyasında Supabase import/env/veri erişimi olmadığını doğrular.
|
||||
- `pnpm phase2:domain-smoke`: gerçek migration uygulanmış SQLite'ta CRUD, aggregate, relation invariant ve cross-owner negatiflerini doğrular.
|
||||
- `pnpm phase5:smoke`: yukarıdaki kontrollerin yanında Better Auth owner cookie ile 11 kritik freelancer route'unu SSR eder.
|
||||
- `pnpm typecheck`: başarılı.
|
||||
- Faz 5 adapter ve backend dosyalarında hedefli ESLint: başarılı.
|
||||
- `pnpm build`: başarılı.
|
||||
- `git diff --check`: başarılı.
|
||||
|
||||
Repo genel lint'i, Faz 5'in değiştirmediği legacy client component ve Faz 6–7 dosyalarındaki mevcut borçlar nedeniyle release genelinde açık kalır.
|
||||
Reference in New Issue
Block a user