Bu belge, Deniko projesinin genel teknik mimarisini, kullanılan teknolojileri ve veri akışını açıklar.
- Monorepo Yönetimi: pnpm workspaces
- Frontend: Next.js 16 (App Router)
- Backend API: Fastify
- Dil: TypeScript
- Veritabanı: PostgreSQL
- ORM: Prisma v7 (Sadece API servisinde)
- Kimlik Doğrulama: Auth.js (NextAuth.js v5) + Argon2
- Dosya Depolama: Google Cloud Storage (GCS)
- Stil: Tailwind CSS v4
- UI Kütüphanesi: Radix UI / shadcn-ui
Proje, sorumlulukların ayrıldığı bir monorepo yapısındadır:
- Teknoloji: Next.js 16
- Sorumluluk: Kullanıcı arayüzü, SSR, Auth.js entegrasyonu.
- Kısıtlamalar: Veritabanına doğrudan erişimi yoktur. Tüm veri işlemleri için Dahili API'yi kullanır.
- İletişim:
lib/internal-api.tsüzerindenapps/apiile konuşur.
- Teknoloji: Fastify
- Sorumluluk: İş mantığı, veritabanı erişimi, veri doğrulama.
- Erişim: Sadece dahili ağdan (internal network) erişilebilir. Dış dünyaya kapalıdır.
- Veritabanı: Prisma Client'ı barındıran tek servistir.
packages/db: Prisma şeması ve generated client.packages/storage: Google Cloud Storage işlemleri.packages/logger: Pino tabanlı yapılandırılmış loglama.packages/validation: Zod şemaları (Frontend ve Backend arasında paylaşılır).
- İstemci İsteği: Kullanıcı tarayıcıdan bir işlem yapar (örn. profil güncelleme).
- Next.js Server Action: İstek
apps/webtarafında bir Server Action tarafından karşılanır. - Dahili API Çağrısı: Server Action,
internalApiFetchkullanarakhttp://localhost:4000(veya prodüksiyon URL'i) adresindeki Fastify servisine istek atar. - İş Mantığı & DB: Fastify servisi isteği doğrular, Prisma aracılığıyla veritabanı işlemini yapar.
- Yanıt: Sonuç zincirleme olarak geriye döner.
- Yükleme: Frontend -> API (Stream) -> GCS.
- Okuma: Frontend -> API (Signed URL veya Stream) -> GCS.
- Veritabanı İzolasyonu: Frontend'in veritabanı şifrelerine veya bağlantısına erişimi yoktur.
- Internal API: API servisi public internete açılmaz, sadece Next.js sunucusu erişebilir.
- Argon2: Şifreler Argon2 algoritması ile hashlenir.
- CI Kontrolleri:
scripts/check-internal-api-usage.tsscripti, frontend kodunda yanlışlıkla doğrudan API URL'i (localhost:4000) kullanımını engeller.
deniko/
├── apps/
│ ├── web/ # Next.js Frontend
│ └── api/ # Fastify Backend
├── packages/
│ ├── db/ # Prisma & DB Client
│ ├── storage/ # GCS Wrapper
│ ├── logger/ # Logging
│ └── validation/ # Shared Zod Schemas
├── docs/ # Dokümantasyon
└── scripts/ # CI/CD Scriptleri