Skip to content

Mimari

Yüksek seviye

flowchart LR
    U[Tarayıcı] --> N[nginx / Vite dev sunucusu]
    N -->|/api/*| B[Express API]
    B --> M[(MongoDB)]
    B --> S[(MinIO)]
    B --> P[SMTP]
    B -.opsiyonel.-> SE[Sentry]

Backend katmanları

backend/src altında beş katman ve iki altyapı dizini vardır:

Katman Sorumluluk
routers/ Yol ve HTTP metodu tanımı, middleware zinciri
controllers/ HTTP giriş/çıkışı, istek gövdesinin normalize edilmesi
services/ İş kuralı, doğrulama, veritabanı ve dış servis çağrıları
models/ Koleksiyon adları, izin verilen değerler, belge tipleri
middlewares/ Kimlik doğrulama, rol denetimi, istek kimliği, hata yönetimi
utils/ Yanıt biçimi, JWT, ortam değişkenleri, denetim kaydı
db/ MongoDB bağlantısının tek sahibi

Bağımlılık yönü tek yönlüdür: routers → controllers → services → models/db. models/ katmanı Express'i bilmez (içinde Request/Response tipi geçmez).

Uygulama başlatma sırası

backend/src/server.ts:

  1. import './instrument' — Sentry (varsa) en erken noktada yüklenir.
  2. connectToDatabase() — başarısız olursa HTTP sunucusu hiç başlamaz.
  3. ensurePlatformLogIndexes() — indeksler istek başına değil, bir kez.
  4. startReminderMailScheduler() — arka plan hatırlatıcı zamanlayıcısı.
  5. createApp() + app.listen(env.port, '0.0.0.0').

0.0.0.0 zorunludur: container içinde yalnızca 127.0.0.1 dinlenirse yayınlanan port üzerinden gelen istekler ulaşamaz.

Kapatma (graceful shutdown)

SIGINT / SIGTERM / uncaughtException → zamanlayıcı durdurulur, HTTP sunucusu kapatılır, MongoDB bağlantısı kapatılır, process.exit(0). unhandledRejection yalnızca loglanır, süreci kapatmaz.

Router bağlama sırası

backend/src/app.ts içinde router'lar şu sırayla bağlanır ve aynı router'lar ikinci kez /api/v1 öneki ile de bağlanır:

health → auth → platform → api-doc → nodered → docs

Sonra Sentry.setupExpressErrorHandler(app), ardından notFoundHandler ve errorHandler gelir. Sentry katmanı yalnızca raporlar; yanıtı üretmez.