🏗️ Bölüm 2
Sistem Mimarisi ve Altyapı Tasarımı

SRS V5'teki yönlendirmeler temel alındı: web tabanlı yönetim + mobil saha operasyonu tek çekirdek API üzerinden çalışır. Her katman bağımsız ölçeklenebilir; ödeme sağlayıcısı ve harita sağlayıcısı adaptörlerle soyutlanır.

🧱 Katman Görünümü
Yukarıdan aşağıya: istemci → API → servisler → veri

İstemciler

🖥️ Firma Paneli — React.js + TailwindCSS 🛡️ Admin Paneli — React.js + TailwindCSS 📱 Mobil App — React Native (iOS + Android) 🌐 Tanıtım Sitesi — Next.js (Faz 2, üyeliksiz ilan formu dahil)
▲▼ REST + WebSocket ▲▼

API Katmanı — NestJS (Node.js)

REST API (versionlu /v1) WebSocket Gateway (chat + canlı konum) JWT Auth + RBAC Rate limit & Audit log
▲▼ ▲▼

Çekirdek Servisler (modüler monolit → servis bazlı büyüyebilir)

👤 Kimlik & Doğrulama 📄 Evrak Yönetimi 📋 İlan & Eşleştirme ⚖️ Teklif (Ters İhale) 💬 Mesajlaşma 👛 Cüzdan & Ödeme 🔔 Bildirim (Push/E-posta/SMS) 📢 Reklam Yönetimi 📍 Takip & SOS 🗺️ Rota Optimizasyonu ⭐ Puanlama & Rozet 🌐 Misafir İlan (Faz 2)
▲▼ ▲▼

Veri Katmanı

🐘 PostgreSQL — ana ilişkisel veri (SRS zorunluluğu) ⚡ Redis — canlı konum (TTL), cache, iş kuyrukları (BullMQ) 🪣 S3 / GCS — evrak ve araç fotoğrafları (presigned URL) 🔎 Elasticsearch — ilan arama (opsiyonel, Faz 1.5)
▲▼ ▲▼

Dış Servisler (adaptör katmanı ile)

📨 Twilio / Netgsm — SMS OTP ✉️ SendGrid — e-posta 🔥 Firebase FCM — push bildirim 💳 Iyzico / PayTR — cüzdan yükleme (adaptör: değiştirilebilir) 🗺️ Google Maps — Directions / Geocoding (adaptör)
📋 İlan Yayına Alma Akışı
Cüzdan mantığı SRS 8.1'e birebir
1️⃣ Firma ilanı doldurur (iş tipi → dinamik alanlar)
↓
2️⃣ Cüzdan bakiyesi kontrol edilir
↓
3️⃣ Yeterliyse düşülür · değilse taslağa alınır
↓
4️⃣ Otomatik içerik denetimi → yayında
↓
5️⃣ Eşleşen şoförlere FCM push düşer
⚖️ Teklif / İş Kesinleşme Akışı
SRS 10.2 + 10.3 birleşik
1️⃣ Şoför ilanı görür → "Teklif Ver" (maskeli sohbet açılır)
↓
2️⃣ Firma teklifleri karşılaştırır (en düşük/yeşil vurgu)
↓
3️⃣ Atama → kimlikler açılır, iletişim görünür
↓
4️⃣ Şoför QR okutur → Sürüş Modu
↓
5️⃣ Tamamlama → karşılıklı puanlama
🌐 Misafir İlan Akışı (Faz 2)
Üyelik olmadan pazaryerine giriş
1️⃣ Tanıtım sitesinde kısa form (rota, tarih, araç tipi)
↓
2️⃣ E-posta doğrulama kodu
↓
3️⃣ Kredi kartı ödeme (ilansın ücreti)
↓
4️⃣ Moderasyon kuyruğu (admin onayı)
↓
5️⃣ Pazaryerinde "Fırsat Radarı"nda yayınlanır
🧰 Teknoloji Kararları
KatmanSeçimNeden
WebReact.js + TailwindCSSSRS önerisi; hızlı UI, geniş ekosistem
MobilReact NativeWeb ekibiyle dil ortaklığı; kamera/GPS/FCM erişimi hazır
BackendNestJS (Node.js)Modüler yapı, WebSocket desteği, TipScript ile tip güvenliği
DBPostgreSQL 16İlişkisel zorunluluk + JSONB (waypoints, job_types)
Cache/QueueRedis + BullMQCanlı konum TTL, push kuyruğu, zamanlanmış işler
DosyaAWS S3 + presigned URLEvraklar sunucudan geçmez, doğrudan yükleme
🔐 Güvenlik & KVKK Kararları
✅ SMS + e-posta doğrulaması tamamlanmadan profil aktifleşmez (SRS kuralı)
✅ Hassas belgeler (adli sicil, TC No) S3'te şifreli, erişim audit log'lu
✅ TC No sütun şifrelemesi; panelde maskeli gösterim (497******8)
✅ Rol bazlı yetki: admin görür, firma/şoför görmez
✅ Chat'te iş onayına kadar kimlik maskeli; numara kalıbı filtresi
✅ SOS anında GPS kaydı + olay log'u değiştirilemez şekilde saklanır
✅ Tüm fiyat/ücret değişiklikleri versiyonlanır (fiyatlandırma denetimi)
📌 Karar notu: SRS'te ".NET Core alternatifi" belirtilmişti; NestJS seçildi çünkü ekip ortak dili TypeScript, WebSocket/queue ekosistemi olgun. İsterseniz .NET Core sürümü için mimari sayfa ayrıca uyarlanabilir — veri modeli değişmez.