Mimari Harita
Her servis bağımsız build edilir, kendi sorumluluk alanını yönetir ve dış dünyaya yalnızca Gateway üzerinden açılır. İç iletişim Kafka eventleriyle asenkron ilerler.
Kârlılık Mantığı
Para değerleri her zaman integer cent/kuruş olarak saklanır. Float kullanılmaz.
- Gelir = ödenmiş fatura toplamı
- Saat maliyeti = toplam saat × kullanıcının saatlik maliyeti
- Net kâr = gelir - saat maliyeti - giderler
- Kâr marjı = net kâr / gelir × 100
Risk Skoru
0-30 sağlıklı, 31-60 dikkatli, 61-100 zararlı müşteri. Skor; gecikmiş fatura, ödeme gecikmesi, şikayet/revizyon oranı, kâr marjı ve iş hacmiyle hesaplanır.
Event, Cache ve Monitoring
Bu bölüm canlı sistem davranışını hızlı anlamak için hazırlanmıştır.
Kafka Eventleri
- time.entry.created → profitability recalculation
- expense.added → profitability recalculation
- invoice.paid → profit + risk update
- invoice.overdue → risk increase
- project.closed → final snapshot
Redis Cache Keys
- profit:project:{project_id}
- profit:client:{client_id}
- risk:client:{client_id}
- dashboard:user:{user_id}
Observability
- /metrics tüm servislerde açık
- http_requests_total
- http_request_duration_seconds
- kafka_events_published_total
- kafka_events_consumed_total
Canlı Test Lab
Önce kullanıcı oluştur veya login ol. Token otomatik saklanır; sonra korumalı endpointleri aynı sayfadan deneyebilirsin.
1. Auth Token Al
2. Endpoint Test Et
Önerilen Test Senaryoları
Uçtan uca kârlılık testi için sıralı çalıştırılabilecek akışlar.
Happy Path
- Register + login
- Client oluştur
- Project oluştur
- Time entry + expense ekle
- Invoice oluştur, paid işaretle
- Profitability ve dashboard oku
Security Path
- Token olmadan /dashboard çağır → 401
- Yanlış token ile /clients çağır → 401
- Başka user verisine erişim dene → 404/403 bekle
- Refresh token ile access yenile
Monitoring Path
- /metrics endpointlerini kontrol et
- Prometheus target durumuna bak
- Grafana dashboardlarını aç
- Kafka event sayaçlarını izle
Endpoint Explorer
OpenAPI spec canlı okunur. Endpoint aç, cURL kopyala veya path'i Test Lab'e gönder.