Bakım Onarım Yönetimi
Arıza, SLA, iş emri, saha, kapanış. Çok şirketli bakım süreci tek platformda.
Bu nasıl ölçüldü: vitest ve ayrı bir entegrasyon yapılandırması. Katman kuralları her derlemede dependency-cruiser ile denetleniyor.
- APPS
- api
- web
- saha
- admin
- PACKAGES
- core
- db
- shared
- ui
- config
- RULES
- dependency-cruiser5 layer rules
- DATA
- PostgreSQL
Problem
Bakım hafızada yürüyor. Arıza sözlü bildiriliyor. Kimin ne zaman müdahale ettiği kayda geçmiyor, hangi parçanın kullanıldığı bilinmiyor. Makinenin üretime döndüğünü kimse doğrulamıyor. Aynı arıza tekrar ediyor; maliyet görünmüyor.
İkinci kısıt çok şirketlilik. Sistem tek müşteriye yazılmadı, şirketlere satılacak bir ürün olarak geliştirildi. İzolasyon ve yetki ilk günden doğru kurulmalıydı.
Kısıtlar
- Aynı iş kuralları hem HTTP API'sinden hem kuyruk tüketicisinden çağrılacak; kural controller'a gömülemez.
- Saha uygulaması çevrimdışı çalışacak, sonra senkronize olacak.
- Kimlik ve yetki Keycloak'ta. Her modül kendi sınırını koruyacak.
Mimari kararlar
Dört süreç, tek iş çekirdeği
apps/api, apps/worker, apps/web, apps/mobile; iş modülleri packages/backend içinde. Aynı kural iki kez yazılmıyor.
Bedeli: İki süreç ayrı dağıtılıyor; dağıtım karmaşıklığı artıyor.
Modül içinde üç katman, dışa tek yüzey
application/ akışı ve transaction sınırını, domain/ saf TypeScript'i, infrastructure/ Prisma ve dış adaptörleri taşıyor. Modüller yalnız index.ts üzerinden konuşuyor.
Bedeli: Küçük değişiklikte üç dosyaya dokunuluyor; karşılığında başka modülün tablosuna yazma kazası imkânsız.
Katman sınırı dokümanda değil, CI'da
Beş kural dependency-cruiser ile denetleniyor: domain Nest/Prisma/HTTP import etmez, infrastructure dışında @prisma/client yok, iş kuralı HTTP nesnesine bağlanmaz, modül yalnız index.ts yüzeyini kullanır, katman yönü tersine dönmez.
Bedeli: Yeni geliştirici ilk gün duvara çarpıyor; bir hafta sonra kuralı kendisi koruyor.
İstemci elle yazılmıyor, üretiliyor
api-client paketi API'nin OpenAPI çıktısından üretiliyor; sözleşme kayması CI'da yakalanıyor.
Bedeli: Build süresini uzatıyor.
Yan etkiler outbox + kuyruk
Bildirim ve entegrasyon işleri HTTP isteğinin içinde değil; outbox yazılıyor, worker BullMQ üzerinden tüketiyor.
Bedeli: En az bir kez teslim; tüketiciler idempotent olmak zorunda.
Kanıt
- Test dosyası68 (vitest + entegrasyon)
- Uygulama / paket4 / 5
- Denetlenen katman kuralı5, her build'de
- API sözleşmesiOpenAPI'den üretilen istemci, kayma CI'da
Bilinen sınırlar
- Pilot sahada koşulmadı; üretim sertleştirmesi açık.
- Kaynak kodu özel repoda.
Ne öğrendim
Katman kuralı dokümanda durduğu sürece çürüyor. CI'ya taşıdığın gün tartışma bitiyor. İhlal, kod incelemesinde değil, kırmızı build'de çıkıyor.