Mimari
Haljet’in sunucu tarafında geçiş boyunca iki NestJS uygulaması çalışır:
haljet-api(v1) geniş üretim yüzeyini, eski mobili, cron'ları ve henüz taşınmamış entegrasyonları yürütür.haljet-api-new(v2) taşınmış panel uçlarını, yeni domain yüzeylerini ve yeni BUYER uygulamasını yürütür.
İkisi de api genel önekini kullanır ve aynı MySQL, MongoDB ve Redis altyapısına bağlanır. Aynı jeton sırları sayesinde tek oturum iki serviste de geçerlidir.
Birlikte çalışma
Prisma şeması ve migration'ların sahibi v1'dir. v2 aynı şemanın ayna kopyasıyla istemci üretir; ortak Mongo belgelerine v1 biçimini koruyarak yazar. Ayrıntı: Geçiş ve veri sahipliği.
v1 katmanları
| Katman | Görevi |
|---|---|
| HTTP | NestJS denetleyicileri. Varsayılan önek api. |
| İş kuralı | Modül servisleri. Sipariş, ödeme, stok gibi kurallar burada. |
| Olaylar | İç olay yayıcı. Sipariş oluşunca bildirim, rapor, Firestore senkronu gibi yan işler tetiklenir. |
| Kuyruk | Bull + Redis. Transfer sevk, rapor toplama, mesaj yapay zekası. |
| Zamanlanmış iş | Nest Schedule. Fatura, heatmap, grup değerlendirme, indeks yenileme. |
| Kilit | MurLock (Redis). Aynı kullanıcının aynı anda iki sipariş oluşturması gibi yarışları keser. |
v1 modül listesi: Modül haritası.
v2 katmanları
v2 düz bir modül listesi yerine üç katman kullanır:
| Katman | Görevi |
|---|---|
core | Kimlik, hesap, yapılandırma, veritabanı bağlantıları ve ortak entegrasyonlar |
domains | catalog, comms, finance, logistics, orders, parties |
ops | Panel ürünü olmayan rebuild ve backfill işlemleri |
Her Mongo koleksiyonunun tek bir yazma sahibi vardır. Alanlar genel olarak birbirinin verisini yayımlanan servislerden okur; stok/fatura eşleştirmesindeki açık salt-okuma istisnaları sahipliği değiştirmez. Detay: v2 mimarisi.
Güvenlik varsayılanları
v1'de uygulama genelinde JWT erişim jetonu zorunludur (AtGuard). Açık uçlar @Public() ile işaretlenir: giriş, bölge listesi, genel katalog, ödeme geri bildirimi, İzibiz web kancası gibi.
| Mekanizma | Ne zaman kullanılır |
|---|---|
| JWT erişim jetonu | Neredeyse tüm uçlar. Süre: 1 gün. |
| JWT yenileme jetonu | Oturum yenileme. Süre: 7 gün. |
| API anahtarı | Özellikle auth uçları. |
| Rol | Alıcı / satıcı / yetkili / yönetici ayrımı. |
| İzin kodu | Örneğin admin:buyer:full, officer:buyer-order-transfer:full. |
İstek ve yanıt
v1 doğrulaması class-validator ile yapılır. Dil, Accept-Language başlığından okunur; varsayılan dil Türkçe. Sayfalı listelerde yanıt gövdesi çoğunlukla data ve isteğe bağlı meta kullanır.
v2 tanımsız parametreyi sessizce atmak yerine 400 döndürür. Yeni v2 uçlarında sayfalama { data, page, limit, total, totalPages }, sayfasız liste { data } biçimindedir. Taşınan uçlar geçerli v1 yanıtını koruduğu için iki biçim geçiş boyunca yan yana bulunur.
Çevredeki sistemler
Bunların her biri Altyapı ve dış sistemler sayfasında açıklanır.
| Sistem | Rol |
|---|---|
| MySQL | Ana ilişkisel kayıt |
| MongoDB | Sipariş ve operasyon belgeleri |
| Redis | Kuyruk, kilit, önbellek |
| MeiliSearch | v1 ürün araması; v2 katalog aramasını veritabanından yapar |
| Firebase | Push, Firestore alıcı senkronu, dosya |
| BigQuery | v1 analitik olay akışı; v2'nin kendi ödendi yaptığı akışlara taşınmadı |
| PayTR / Paywall | Kart ve EFT ödeme |
| İzibiz | E-fatura / e-arşiv |
| HKS | Hal kayıt sistemi bildirimleri |
| Netgsm | SMS |
| Resend | E-posta |
| Telegram | Operasyon uyarıları |
| Google Gemini | İç yapay zeka metinleri |
Uygulama içi dil
API kodu İngilizce isimler kullanır. İş dilinde karşılıklar:
| Kod adı | İş adı |
|---|---|
| Buyer | Alıcı |
| Seller | Satıcı |
| Officer | Yetkili / saha veya depo personeli |
| Admin | Yönetici |
| Warehouse | Depo |
| BuyerOrder | Alıcı siparişi |
| Transfer | Teslimat taşıması |
| FinancialAccount | Cari hesap |