4.0 KiB
4.0 KiB
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.