OUKITEL B2B Paketi
Kurumsal satış, servis kabulü ve iade süreçlerini kapsayan, tek bir NestJS arka ucunu paylaşan dört Flutter uygulaması ve bir web istemcisi.
- 4
- 1
- Play Store
Mimari
- İstemci
- Servis
- Veri deposu
- Harici
Problem
OUKITEL'in bölgesel operasyonu, hepsi aynı stok ve müşteri kayıtlarına dokunan farklı roller için araçlara ihtiyaç duyuyordu: bir satış uygulaması, bir servis takip uygulaması, bir program uygulaması ve bir iade akışı.
Dört ayrı kullanıcı kitlesi, dört ayrı uygulama, tek bir kayıt kümesi. Dört arka uç yazmak; cihazın, müşterinin ve servis kaydının dört farklı tanımını garanti ederdi. Dört modlu tek bir uygulama yazmak ise her role, hiç yapmadığı işlerle dolu kalabalık bir arayüz teslim ederdi.
Yaklaşım
Role göre kapsamlanmış yüzeyler sunan tek bir NestJS API'si ve her biri yalnızca kendi rolünün ihtiyacını gösteren dört ince Flutter istemcisi. Dosyalar API üzerinden değil, ön imzalı S3 bağlantılarıyla taşınıyor; böylece servis fotoğrafı yüklemek bir istek işçisini meşgul etmiyor. Yavaş işler — bildirimler, dışa aktarmalar, rapor üretimi — BullMQ kuyruklarına gidiyor.
Fark yaratan kararlar
Tek API, dört istemci
Şemanın sahibi olan tek bir NestJS servisi, Swagger ile belgelenmiş, role göre kapsamlanmış yüzeyler sunuyor. Her Flutter uygulaması bunun üzerinde ince bir istemci. Beşinci bir rol eklemek, bir yüzey eklemek demek; yeni bir arka uç değil.
Ön imzalı yüklemeler
Servis fotoğrafları, ön imzalı bağlantılarla cihazdan doğrudan S3'e gidiyor. API kimlik bilgisini üretiyor ve sonucu kaydediyor; baytları hiçbir zaman aktarmıyor. Böylece yükleme trafiği, istek işleme ile aynı işçi havuzu için yarışmayı bırakıyor.
Yavaş olan her şey kuyruğa
Bildirim dağıtımı, tablo dışa aktarımı ve rapor üretimi Redis üzerinde BullMQ ile çalışıyor. Bin bildirim tetikleyen bir istek anında dönüyor, iş arka planda tükeniyor.
Yerelleştirme istemcide değil, API'de
`nestjs-i18n` dili sunucu tarafında çözüyor; böylece dört istemci, aynı mesaj kataloğunun birbirinden ayrışan dört kopyasını taşımıyor.
Zor problemler
Dört uygulama, tek sürüm disiplini
Ortak Dart modelleri ve paylaşılan HTTP katmanı tek tek uygulamalardan çıkarıldı; böylece bir sözleşme değişikliği dört kez değil, bir kez iniyor. Alternatifi — modeli dört depoya kopyalayıp yapıştırmak — biri birini unuttuğu ilk anda sessizce bozulur.
Saha koşulları
Servis kabulü, bağlantısı güvenilmez atölyelerde yapılıyor. Güvenli yerel depolama, kimlik bilgilerini ve yarım kalmış kayıtları tutuyor; bağlantı koptuğunda hiçbir şey kaybolmuyor ve cihaz döndüğünde yazmalar uzlaştırılıyor.
Tersine mühendislik yapılmış istemciye dayanan yetkilendirme
Uygulamadaki rol kontrolü kullanıcının ne göreceğini belirler; onu durduran şey o değildir. Her uç nokta, herhangi bir istemcinin değiştirilebileceği varsayımıyla kendi guard'ını sunucu tarafında uygular.
Rolüm
Arka uç, dört Flutter uygulamasının tamamı ve Next.js istemcisi için tek mühendis.
Durum
Kurumsal uygulama Google Play'de yayında. Paket aktif kullanımda.
Teknolojiler
- FlutterDartFirebase
- NestJSPrismaPostgreSQLRedisBullMQSwagger
- AWS S3Presigned URLsMinIO
- Next.jsTypeScript