Skip to content
Ercan Labs
← Tüm işlerPLATFORM · PRIVATE · in-development

Bakım Onarım Yönetimi

Arıza, SLA, iş emri, saha, kapanış. Çok şirketli bakım süreci tek platformda.

68
test dosyası
4
uygulama
5
paket
5
denetlenen katman kuralı

Bu nasıl ölçüldü: vitest ve ayrı bir entegrasyon yapılandırması. Katman kuralları her derlemede dependency-cruiser ile denetleniyor.

Mimarilayer rules run on every build
  1. APPS
    • api
    • web
    • saha
    • admin
  2. PACKAGES
    • core
    • db
    • shared
    • ui
    • config
  3. RULES
    • dependency-cruiser5 layer rules
  4. DATA
    • PostgreSQL
İş kuralı core paketinde duruyor; api paketi yalnızca taşıyor. Kural ihlali derlemeyi kırıyor.

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

01

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.

02

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.

03

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.

04

İ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.

05

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.

Stack

NestJSPrismaPostgreSQLBullMQReactReact NativeKeycloak