TELCO CRM PLATFORM
Microservices Mimarisi ile Telekomünikasyon CRM Sistemi
MVP Analiz ve Tasarım Dokümanı
Eğitim Projesi - Öğrenci Yol Haritası
Java 21 • Spring Boot 3.x • Spring Cloud • PostgreSQL • Kafka • Docker • Kubernetes
Versiyon 1.0
İçindekiler¶
1. Proje Vizyonu ve Hedefler
2. Domain Analizi: Telekom CRM Nedir?
3. Aktörler ve Persona Tanımları
4. Fonksiyonel Gereksinimler
5. Fonksiyonel Olmayan Gereksinimler
6. MVP Kapsamı (Scope In / Scope Out)
7. Microservices Mimarisi - Servis Bazlı Bounded Context
8. Servis Detayları
9. Servisler Arası İletişim ve Event Akışı
10. Veri Modeli - Yüksek Seviye Varlıklar
11. Teknoloji Yığını
12. API Tasarım Standartları
13. Güvenlik Mimarisi
14. Kabul Kriterleri (Acceptance Criteria)
15. Sözlük (Glossary)
1. Proje Vizyonu ve Hedefler¶
1.1 Vizyon¶
Telco CRM Platform, bir GSM operatörünün abonelerine yönelik tüm yaşam döngüsü süreçlerini (müşteri kaydı, ürün siparişi, faturalandırma, kullanım takibi, müşteri destek) tek bir microservices ekosistemi üzerinden yönetebilen, ölçeklenebilir ve event-driven bir CRM platformudur.
1.2 Eğitim Hedefleri¶
Bu proje öğrencilerin aşağıdaki konularda gerçek dünya seviyesinde yetkinlik kazanmasını hedefler:
- Domain-Driven Design (DDD) ile bounded context çıkarımı
- Spring Boot 3 ile production-grade microservices geliştirme
- Spring Cloud (Config, Gateway, Discovery) ile servis topolojisi yönetimi
- Apache Kafka ile asenkron event-driven entegrasyon
- REST + OpenAPI ile senkron iletişim ve sözleşme yönetimi
- PostgreSQL ile per-service veri tabanı (database-per-service pattern)
- Redis ile cache-aside ve idempotency stratejileri
- Docker Compose ile lokal orkestrasyon, Kubernetes ile production deployment
- Distributed tracing (OpenTelemetry / Zipkin) ve merkezi loglama
- JWT + OAuth2 ile API gateway seviyesinde güvenlik
- Resilience4j ile circuit breaker, retry ve bulkhead pattern uygulaması
- CI/CD pipeline kurulumu (GitHub Actions / GitLab CI)
1.3 İş Hedefleri (Senaryo)¶
Hayali operatörümüz "TelcoX", mevcut monolit CRM sistemini parça parça mikroservislere taşımak istemektedir. MVP kapsamında abone yaşam döngüsünün uçtan uca dijitalleştirilmesi, fatura üretiminin otomatize edilmesi ve self-servis kanalların (mobil/web) açılması hedeflenir.
2. Domain Analizi: Telekom CRM Nedir?¶
Telekom CRM, bir operatörün müşteri ile olan tüm temas noktalarını (sales, service, support, billing) yöneten sistemler bütünüdür. Bankacılıkla benzer şekilde regülasyona tabi (BTK), yüksek hacimli ve gerçek zamanlı (CDR akışı) bir domaindir.
2.1 Telekom Özelinde Önemli Kavramlar¶
| Kavram | Açıklama |
|---|---|
| MSISDN | Mobile Subscriber ISDN - abonenin telefon numarası. Sistemde unique identifier rolü oynar. |
| IMSI | International Mobile Subscriber Identity - SIM kart üzerindeki benzersiz kimlik. |
| ICCID | SIM kartın seri numarası. |
| Subscription | Bir müşterinin belirli bir tarife/pakete olan aktif aboneliği. |
| Tariff / Plan | Aboneye sunulan dakika, SMS, GB paketi. Postpaid ya da prepaid olabilir. |
| VAS | Value Added Services - ek servisler (caller tunes, cloud, sigorta vb.). |
| CDR | Call Detail Record - her arama/SMS/data kullanım kaydı. Faturalandırmanın temelidir. |
| Top-up | Prepaid hatlara TL yüklemesi. |
| MNP | Mobile Number Portability - operatör değiştirme / numara taşıma. |
| BSCS / OCS | Billing & Charging System - gerçek operatörde fatura motoru. |
2.2 Event Storming Çıktısı (Özet)¶
Aşağıdaki domain event'leri proje boyunca servisler arasında akacaktır:
- CustomerRegistered, CustomerKYCApproved, CustomerKYCRejected
- MSISDNAllocated, MSISDNReleased
- OrderCreated, OrderConfirmed, OrderCancelled
- SubscriptionActivated, SubscriptionSuspended, SubscriptionTerminated
- TariffChanged, AddonPurchased
- UsageRecorded, QuotaThresholdReached, QuotaExceeded
- InvoiceGenerated, PaymentReceived, PaymentFailed
- TicketOpened, TicketAssigned, TicketResolved
- NotificationDispatched
3. Aktörler ve Persona Tanımları¶
| Aktör | Rolü | Tipik İşlemleri |
|---|---|---|
| Müşteri (Subscriber) | Son kullanıcı abone | Kayıt, sipariş, fatura görüntüleme, top-up, paket değişikliği, talep açma |
| Çağrı Merkezi Temsilcisi | Customer support agent | Ticket çözme, abone bilgisi görme, manuel paket değiştirme |
| Saha Bayisi | Dealer / retailer | Yeni abone aktivasyonu, SIM satışı, KYC ekran girişi |
| Pazarlama Yöneticisi | Marketing manager | Kampanya tanımlama, segment çıkarma |
| Sistem Yöneticisi | Admin | Tarife/ürün katalog yönetimi, kullanıcı yetkilendirme |
| Fatura Operatörü | Billing operator | Aylık fatura kesim job'larını izleme, fatura iptali |
| Sistem (Internal Service) | Service-to-service | Event publish/consume, scheduled job, CDR mediation |
4. Fonksiyonel Gereksinimler¶
Gereksinimler FR-XX kodu ile numaralandırılmıştır. Her gereksinimin karşılığında ilgili microservice ve ödev haftası belirtilmiştir.
4.1 Müşteri Yönetimi (Customer Service)¶
- FR-01: Sistem, bireysel ve kurumsal müşteri kaydını destekleyecektir (TCKN / VKN doğrulamalı).
- FR-02: KYC süreci sonrasında müşteri durumu PENDING → ACTIVE / REJECTED olarak güncellenir.
- FR-03: Müşteri adres, iletişim bilgisi ve kimlik belgesi yönetebilmelidir.
- FR-04: Müşteri silme işlemi soft-delete ile yapılır (GDPR/KVKK).
4.2 Ürün ve Tarife Kataloğu (Product Catalog Service)¶
- FR-05: Sistem tarife, paket, addon ve VAS ürünlerini hiyerarşik olarak yönetebilmelidir.
- FR-06: Her ürünün geçerlilik tarihleri (effectiveFrom / effectiveTo) ve hedef segmenti vardır.
- FR-07: Ürünler postpaid, prepaid, hybrid olarak sınıflandırılır.
- FR-08: Tarife değişiklikleri versiyonlanmalı, eski abonelerin tarifesi korunmalıdır.
4.3 Sipariş Yönetimi (Order Service)¶
- FR-09: Müşteri yeni hat siparişi, paket değişikliği veya addon siparişi verebilmelidir.
- FR-10: Siparişler saga pattern ile çoklu servis koordinasyonu içinde işlenir.
- FR-11: Sipariş durumları: DRAFT, PENDING_PAYMENT, PAID, FULFILLED, CANCELLED.
- FR-12: Sipariş iptalinde kompansasyon eventleri tetiklenir.
4.4 Abonelik Yönetimi (Subscription Service)¶
- FR-13: Sipariş tamamlandığında abonelik otomatik aktive edilir.
- FR-14: Abonelik askıya alma (ödeme yapılmadıysa), yeniden aktivasyon ve sonlandırma desteklenir.
- FR-15: Bir müşterinin birden fazla aboneliği olabilir.
- FR-16: Numara taşıma (MNP) için ayrı bir state machine yönetilir.
4.5 Kullanım Takibi (Usage Service)¶
- FR-17: CDR akışı Kafka üzerinden tüketilir ve kullanım bakiyeleri güncellenir.
- FR-18: Kalan kota (minutes, sms, mb) anlık görülebilir.
- FR-19: %80 ve %100 kullanım eşiklerinde notification eventi üretilir.
- FR-20: Aşım kullanımları billing servisine taşınmak üzere agregate edilir.
4.6 Faturalandırma (Billing Service)¶
- FR-21: Aylık bill-run job'u tüm postpaid aboneler için fatura keser.
- FR-22: Fatura kalemleri: aylık ücret, addon ücretleri, aşım, VAS ücretleri, vergiler.
- FR-23: Fatura PDF olarak üretilip Notification servisine gönderilir.
- FR-24: Ödeme alındığında InvoicePaid eventi üretilir.
4.7 Ödeme (Payment Service)¶
- FR-25: Kredi kartı, banka transferi ve cüzdan ile ödeme desteklenir.
- FR-26: Ödeme idempotent çalışır; aynı paymentRequestId iki kez işlenmez.
- FR-27: Başarısız ödemelerde 24/72/168 saat aralıkla retry tetiklenir.
4.8 Bildirim (Notification Service)¶
- FR-28: SMS, e-posta ve push notification kanallarını destekler.
- FR-29: Şablonlu (template) bildirim yönetimi vardır.
- FR-30: Kullanıcının iletişim tercihlerine (opt-in/opt-out) saygı gösterir.
4.9 Çağrı Merkezi Talep Yönetimi (Ticket Service)¶
- FR-31: Müşteriler şikayet, talep ve arıza kaydı açabilmelidir.
- FR-32: Ticket otomatik olarak ilgili ekibe SLA bazlı atanır.
- FR-33: Ticket durumu açıldığında müşteriye bildirim gider.
5. Fonksiyonel Olmayan Gereksinimler¶
| Kategori | Gereksinim | Hedef |
|---|---|---|
| Performans | API yanıt süresi (p95) | < 300 ms |
| Performans | Bill-run job süresi | 100K abone < 30 dk |
| Ölçeklenebilirlik | Yatay ölçeklenebilirlik | Stateless servisler, K8s HPA ile auto-scale |
| Erişilebilirlik | Servis uptime | %99.5 (MVP) |
| Güvenlik | Auth | OAuth2 / JWT, gateway seviyesinde doğrulama |
| Güvenlik | Veri | PII alanlar şifreli saklanır (TCKN, kart no) |
| Gözlemlenebilirlik | Distributed tracing | OpenTelemetry + Zipkin/Jaeger |
| Gözlemlenebilirlik | Loglama | JSON yapılandırılmış log, merkezi (ELK / Loki) |
| Gözlemlenebilirlik | Metrikler | Prometheus + Grafana |
| Dayanıklılık | Circuit breaker | Resilience4j tüm dış çağrılarda |
| Veri Tutarlılığı | Tutarlılık modeli | Eventual consistency (Outbox pattern) |
| Uyumluluk | Regülasyon | KVKK / GDPR, audit log zorunlu |
6. MVP Kapsamı¶
6.1 Scope In (MVP'de Var)¶
- Bireysel müşteri kaydı ve KYC
- Postpaid tarife siparişi ve aktivasyon
- Aylık faturalama (sabit ücret + aşım)
- Kredi kartı ile ödeme (mock PSP)
- SMS ve e-posta bildirimleri (mock kanal)
- Kota görüntüleme ve eşik bildirimleri
- Temel müşteri ticketing
- Admin paneli için ürün katalog CRUD
6.2 Scope Out (MVP Sonrasına)¶
- Prepaid top-up ve gerçek zamanlı charging
- Numara taşıma (MNP) süreci
- Kurumsal müşteri ve filo yönetimi
- Kampanya / promosyon motoru
- BTK regülasyon raporları
- Roaming kullanım takibi
- Mobil uygulama (sadece backend + Swagger UI)
7. Microservices Mimarisi¶
Aşağıdaki tablo MVP'de yer alacak servisleri, bounded context'lerini ve sahip oldukları temel agregatları listeler. Her servis kendi PostgreSQL şemasına sahiptir - database-per-service pattern uygulanır.
| Servis | Port | Bounded Context | Temel Agregatlar |
|---|---|---|---|
| api-gateway | 8080 | Edge routing | - |
| discovery-server | 8761 | Service registry | - |
| config-server | 8888 | Centralized config | - |
| identity-service | 9001 | Kimlik & yetki | User, Role, Permission |
| customer-service | 9002 | Müşteri yönetimi | Customer, Address, Document |
| product-catalog-service | 9003 | Ürün kataloğu | Tariff, Addon, ProductOffering |
| order-service | 9004 | Sipariş orkestrasyonu | Order, OrderItem, SagaState |
| subscription-service | 9005 | Abonelik yaşam döngüsü | Subscription, MSISDN, SimCard |
| usage-service | 9006 | Kullanım & kota | UsageRecord, Quota, CdrEvent |
| billing-service | 9007 | Fatura üretimi | Invoice, InvoiceLine, BillCycle |
| payment-service | 9008 | Ödeme | Payment, PaymentAttempt, Wallet |
| notification-service | 9009 | Bildirim | Notification, Template, Channel |
| ticket-service | 9010 | Müşteri talepleri | Ticket, Comment, SLA |
7.1 Yatay Bileşenler (Infrastructure)¶
- PostgreSQL (her servis için ayrı schema veya ayrı DB instance)
- Apache Kafka - domain event broker
- Redis - cache + rate limiting + idempotency keys
- Keycloak (opsiyonel ileri seviye) - OAuth2 / OIDC sağlayıcı
- MinIO veya local FS - fatura PDF / belge depolama
- Zipkin + ELK + Prometheus + Grafana - observability stack
7.2 Mantıksal Mimari Şeması (Text)¶
[ Web/Mobile Client ] | v +-----------------+ | API Gateway | <-- JWT validation, rate limit, routing +-----------------+ | | (REST) v +---------------------------------------------------------+ | Discovery Server | Config Server | +---------------------------------------------------------+ | ---------------------------------------------------------- | | | | | | v v v v v v identity customer catalog order subscription usage | | | | | | +--------+----------+----------+----------+----------+ | [ Kafka Bus ] | +--------+----------+----------+----------+ | | | | | v v v v v billing payment notification ticket analytics(future)
8. Servis Detayları¶
8.1 Customer Service¶
Sorumluluk
Müşterinin kimlik ve iletişim bilgilerinin master kaydı.
Temel API'ler
- POST /api/v1/customers - yeni müşteri
- GET /api/v1/customers/{id}
- PUT /api/v1/customers/{id}
- POST /api/v1/customers/{id}/documents - KYC belgesi yükleme
- POST /api/v1/customers/{id}/kyc/approve
Event'ler
- Publish: CustomerRegistered, CustomerKYCApproved, CustomerUpdated
8.2 Product Catalog Service¶
Sorumluluk
Tarife, addon, VAS ürünlerinin master katalog yönetimi. Read-heavy servis - Redis cache yoğun kullanılır.
Temel API'ler
- GET /api/v1/tariffs
- GET /api/v1/tariffs/{code}
- POST /api/v1/tariffs (admin)
- GET /api/v1/addons?tariffCode=...
Event'ler
- Publish: TariffCreated, TariffPriceChanged
8.3 Order Service¶
Sorumluluk
Sipariş alma ve Saga ile orchestrate etme. Customer → Catalog → Subscription → Payment zincirini yönetir.
Temel API'ler
- POST /api/v1/orders
- GET /api/v1/orders/{id}
- POST /api/v1/orders/{id}/cancel
Event'ler
- Publish: OrderCreated, OrderConfirmed, OrderCancelled
- Consume: PaymentCompleted, PaymentFailed, SubscriptionActivated
8.4 Subscription Service¶
Sorumluluk
Abonelik state machine'ini yönetir. MSISDN allocation/release.
Temel API'ler
- POST /api/v1/subscriptions (internal - Order tarafından çağrılır)
- GET /api/v1/subscriptions/{id}
- POST /api/v1/subscriptions/{id}/suspend
- POST /api/v1/subscriptions/{id}/reactivate
- POST /api/v1/subscriptions/{id}/terminate
Event'ler
- Publish: SubscriptionActivated, SubscriptionSuspended, SubscriptionTerminated
- Consume: OrderConfirmed, PaymentFailed (after grace period)
8.5 Usage Service¶
Sorumluluk
CDR (Call Detail Record) eventlerini tüketip kullanım sayaçlarını günceller. Write-heavy.
Temel API'ler
- GET /api/v1/usage/subscriptions/{id}/quota
- GET /api/v1/usage/subscriptions/{id}/history?from=...&to=...
Event'ler
- Consume: CdrRecorded (CDR simulator'dan)
- Publish: QuotaThresholdReached, QuotaExceeded
8.6 Billing Service¶
Sorumluluk
Aylık bill-run scheduler ve fatura üretimi.
Temel API'ler
- GET /api/v1/invoices?customerId=...
- GET /api/v1/invoices/{id}
- GET /api/v1/invoices/{id}/pdf
- POST /api/v1/billing/runs (admin trigger)
Event'ler
- Publish: InvoiceGenerated, InvoicePaid, InvoiceOverdue
- Consume: UsageAggregated, SubscriptionActivated, PaymentCompleted
8.7 Payment Service¶
Sorumluluk
Ödeme alma ve PSP entegrasyonu (mock).
Temel API'ler
- POST /api/v1/payments
- GET /api/v1/payments/{id}
- POST /api/v1/payments/{id}/refund
Event'ler
- Publish: PaymentCompleted, PaymentFailed, PaymentRefunded
- Consume: InvoiceGenerated (auto-pay senaryosu için)
8.8 Notification Service¶
Sorumluluk
Çok kanallı bildirim gönderimi.
Temel API'ler
- POST /api/v1/notifications (internal)
- GET /api/v1/notifications/users/{id}/history
Event'ler
- Consume: ALMOST tüm domain eventler (template tabanlı eşleştirme)
8.9 Ticket Service¶
Sorumluluk
Müşteri talep / şikayet yönetimi, SLA.
Temel API'ler
- POST /api/v1/tickets
- GET /api/v1/tickets/{id}
- POST /api/v1/tickets/{id}/comments
- POST /api/v1/tickets/{id}/assign
- POST /api/v1/tickets/{id}/resolve
Event'ler
- Publish: TicketOpened, TicketResolved, SlaBreached
9. Servisler Arası İletişim ve Event Akışı¶
9.1 Senkron vs Asenkron Kararı¶
| Senaryo | İletişim Tipi | Gerekçe |
|---|---|---|
| Order oluştururken Customer kontrolü | Senkron (REST) | İmmediat doğrulama gerekli |
| Order oluştururken katalog ürün fiyatı | Senkron (REST + cache) | Snapshot alınmalı |
| Order → Subscription aktivasyonu | Asenkron (Kafka) | Geri alınabilir, eventual consistency |
| Subscription → Billing'e abonelik bilgisi | Asenkron (Kafka) | Loose coupling |
| CDR akışı → Usage | Asenkron (Kafka) | Yüksek hacim, geriye dönük işlenebilir |
| Invoice → Notification | Asenkron (Kafka) | Notification fail olsa bile fatura kesilmiş kalır |
| Payment doğrulama | Senkron (PSP REST) | Müşteriye anlık geri dönüş gerekli |
9.2 Saga Örneği: Yeni Hat Siparişi¶
1. Customer --POST /orders--> Order Service 2. Order Service: OrderCreated ===> Kafka 3. Payment Service consume OrderCreated -> charge attempt -> PaymentCompleted ===> Kafka 4. Subscription Service consume PaymentCompleted -> allocate MSISDN -> create Subscription -> SubscriptionActivated ===> Kafka 5. Order Service consume SubscriptionActivated -> mark order FULFILLED 6. Notification Service consume SubscriptionActivated -> send welcome SMS Kompansasyon: Eğer SubscriptionActivation fail olursa -> Subscription Service: SubscriptionActivationFailed -> Payment Service: refund tetiklenir -> Order Service: order CANCELLED'a düşer
9.3 Outbox Pattern Zorunluluğu¶
Bir servis DB'sine yazma + Kafka publish atomik olmalıdır. Bunu sağlamak için her serviste outbox tablosu tutulur, ayrı bir publisher worker bu tabloyu Kafka'ya gönderir. Transactional outbox + idempotent consumer kombinasyonu MVP'de zorunludur.
10. Veri Modeli - Yüksek Seviye Varlıklar¶
Aşağıda her servisin sahip olduğu temel varlıkların öz tanımı verilmiştir. Detaylı ER diyagramı çıkarımı Hafta 1 ödevidir.
10.1 Customer Service¶
- Customer(id, type[INDIVIDUAL|CORPORATE], firstName, lastName, identityNumber, dateOfBirth, status, createdAt)
- Address(id, customerId, line1, city, district, postalCode, isDefault)
- Document(id, customerId, type[ID_CARD|PASSPORT], fileRef, verifiedAt)
10.2 Product Catalog¶
- Tariff(id, code, name, type[POSTPAID|PREPAID], monthlyFee, minutesIncluded, smsIncluded, dataMbIncluded, status, effectiveFrom, effectiveTo)
- Addon(id, code, name, price, type[DATA|SMS|MINUTES|VAS], validityDays)
- TariffAddon(tariffId, addonId) - many-to-many
10.3 Order Service¶
- Order(id, customerId, status, totalAmount, currency, createdAt)
- OrderItem(id, orderId, productCode, productType, quantity, unitPrice)
- SagaState(id, orderId, currentStep, payload, lastUpdated)
10.4 Subscription Service¶
- Subscription(id, customerId, msisdn, tariffCode, status[ACTIVE|SUSPENDED|TERMINATED], activatedAt, terminatedAt)
- MsisdnPool(msisdn, status[FREE|RESERVED|ALLOCATED], reservedUntil)
- SimCard(iccid, imsi, msisdn, status)
10.5 Usage Service¶
- Quota(id, subscriptionId, periodStart, periodEnd, minutesRemaining, smsRemaining, mbRemaining)
- UsageRecord(id, subscriptionId, type[VOICE|SMS|DATA], quantity, recordedAt, cdrRef)
10.6 Billing Service¶
- Invoice(id, customerId, subscriptionId, periodStart, periodEnd, subTotal, tax, grandTotal, status, dueDate, issuedAt)
- InvoiceLine(id, invoiceId, description, quantity, unitPrice, lineTotal)
- BillCycle(id, customerId, dayOfMonth, nextRunDate)
10.7 Payment Service¶
- Payment(id, invoiceId, amount, method, status, externalRef, paidAt)
- PaymentAttempt(id, paymentId, attemptNo, response, attemptedAt)
10.8 Notification Service¶
- NotificationTemplate(id, code, channel, locale, subject, bodyTemplate)
- Notification(id, userId, templateCode, channel, payloadJson, status, sentAt)
10.9 Ticket Service¶
- Ticket(id, customerId, category, priority, status, slaDueAt, createdAt)
- TicketComment(id, ticketId, authorId, body, createdAt)
11. Teknoloji Yığını¶
| Katman | Teknoloji | Sürüm / Not |
|---|---|---|
| Dil | Java | 21 (LTS) |
| Framework | Spring Boot | 3.3.x |
| Spring Cloud | Gateway, Config, Eureka/Consul, OpenFeign | 2023.0.x |
| Build | Maven veya Gradle | Maven Multi-module önerilir |
| DB | PostgreSQL | 16, her servis için ayrı schema |
| Cache | Redis | 7 |
| Broker | Apache Kafka | 3.7+ (KRaft mode) |
| Migration | Flyway | Her serviste |
| ORM | Spring Data JPA + Hibernate | - |
| Mapping | MapStruct | - |
| Validation | Jakarta Bean Validation | - |
| Auth | Spring Security + JWT (jjwt 0.12.x) | Gateway'de relay |
| Doc | Springdoc OpenAPI | Her servis ayrı Swagger UI |
| Resilience | Resilience4j | Circuit breaker, retry, bulkhead |
| Observability | Micrometer + OpenTelemetry + Zipkin | - |
| Test | JUnit 5, Mockito, Testcontainers, RestAssured | - |
| Container | Docker, Docker Compose | Lokal geliştirme |
| Orchestration | Kubernetes | Minikube / Kind ile lokal |
| CI/CD | GitHub Actions | Build → test → docker push → kubectl apply |
12. API Tasarım Standartları¶
- Tüm REST API'ler /api/v1 prefix kullanır. Versiyonlama URI bazlıdır.
- Resource isimleri çoğul (customers, orders, subscriptions).
- HTTP method semantiği: GET (read), POST (create + komut), PUT (full update), PATCH (partial), DELETE (soft delete).
- Hata formatı RFC 7807 Problem Details standardına uyar.
- Pagination: ?page=0&size=20&sort=createdAt,desc - Spring Data Pageable kullanılır.
- Idempotency-Key header POST işlemlerinde desteklenir (özellikle Payment, Order).
- Correlation-Id header gateway tarafından enjekte edilir, tüm servislerde log'lara yazılır.
- Tüm tarih alanları ISO-8601 UTC formatındadır.
- Para alanları için BigDecimal + currency code (TRY) ayrı alan olarak tutulur.
12.1 Örnek Hata Cevabı¶
{ "type": "https://telco.example/errors/customer-not-found", "title": "Customer not found", "status": 404, "detail": "Customer with id 1234 does not exist", "instance": "/api/v1/customers/1234", "correlationId": "9f3c1b..." }
13. Güvenlik Mimarisi¶
- Auth: identity-service login üzerinden JWT (access + refresh) üretir.
- API Gateway her isteği JWT ile doğrular, payload'dan userId/role çıkarır ve downstream'e X-User-Id, X-User-Roles header'ları olarak iletir.
- Servisler kendi içinde JWT'yi tekrar doğrulamaz; gateway behind trust kullanılır. (Production'da mTLS önerilir, MVP'de scope dışı.)
- Refresh token rotation: her refresh sonrası eski token blacklist'e (Redis) eklenir, reuse tespit edilirse tüm aktif tokenlar iptal edilir.
- Yetkilendirme: @PreAuthorize ile role/permission bazlı; özellikle admin endpoint'leri için.
- PII şifreleme: TCKN ve kart no AES-GCM ile şifrelenir, key Vault/K8s Secret'tan okunur.
- Audit log: identity, customer, payment ve subscription servislerinde her değişiklik audit_log tablosuna yazılır.
- Rate limit: Gateway'de Redis tabanlı; user başına 100 req/min varsayılan.
14. Kabul Kriterleri¶
MVP teslimde aşağıdaki senaryoların uçtan uca çalışıyor olması gerekir:
14.1 Senaryo: Yeni Abone Onboarding¶
- Müşteri başvurusu yapılır (POST /customers).
- KYC belgesi yüklenir ve admin tarafından onaylanır.
- Müşteri postpaid bir tarife seçip sipariş verir.
- Mock PSP ile ödeme başarılı olur.
- Subscription otomatik aktive olur, MSISDN atanır.
- Müşteriye welcome SMS (mock log) gider.
14.2 Senaryo: Aylık Fatura¶
- Bill-run job manual tetiklenir.
- Aktif abonelerin son 1 aylık usage'i agregate edilir.
- Her abone için invoice oluşur, PDF üretilir.
- InvoiceGenerated eventi ile notification servisi e-posta atar.
- Müşteri faturasını ödediğinde InvoicePaid eventi tetiklenir.
14.3 Senaryo: Kota Aşımı¶
- CDR simulator usage event'leri üretir.
- Usage service kotaları azaltır.
- %80'de uyarı SMS'i gider.
- %100'de ek paket önerisi içeren SMS gider.
- Aşım sonrası kullanım billing'e overage olarak gider.
15. Sözlük (Glossary)¶
| Terim | Tanım |
|---|---|
| Bounded Context | DDD'de bir modelin geçerli olduğu açıkça tanımlı sınır. |
| Saga | Distributed transaction'ları yöneten, kompansasyon adımları içeren pattern. |
| Outbox Pattern | DB transaction + message publish'i atomik hale getiren tablo bazlı çözüm. |
| Idempotency | Aynı işlemin birden fazla kez yapılmasının sonucu değiştirmemesi. |
| CQRS | Command (yazma) ve Query (okuma) sorumluluklarının ayrılması. |
| Circuit Breaker | Hata oranı eşiği aşıldığında çağrıları otomatik kesen pattern (Resilience4j). |
| CDR | Call Detail Record - telekom kullanım kayıtları. |
| MSISDN | Abonenin telefon numarası, sistem-genelinde unique. |
| MNP | Mobile Number Portability - numara taşıma. |
| KYC | Know Your Customer - kimlik doğrulama süreci. |
| VAS | Value Added Service - ek servis (cloud, müzik vb.). |
| KVKK / GDPR | Kişisel verilerin korunmasına dair regülasyonlar. |
| Service Mesh | Servisler arası iletişimi yöneten infrastructure katmanı (Istio vb.). |
| HPA | Horizontal Pod Autoscaler - K8s yatay ölçeklendirme. |
- Doküman Sonu -