v2 mimarisi
haljet-api-new, v1'in bütün modüllerini kopyalayan bir uygulama değildir. Panelin ve yeni mobil uygulamanın ihtiyaç duyduğu yüzeyler alınır, alan sınırları belirgin olacak şekilde yeniden kurulur.
Üç katman
| Katman | Görevi | Bağımlılık kuralı |
|---|---|---|
src/core | Kimlik, hesap, yapılandırma, Prisma, Mongo, Firebase, SMS, depolama, PDF, harita, kilit ve diğer ortak altyapı | Bir iş alanına bağımlı olmaz |
src/domains/<alan> | Katalog, iletişim, finans, lojistik, sipariş ve taraflar | Başka alanın verisini tercihen o alanın yayımladığı servis üzerinden okur |
src/ops | Rapor yeniden kurma, fatura KDV kırılımı gibi yönetim işlemleri | Panel ürünü sayılmaz; ADMIN ile sınırlı bakım yüzeyidir |
Bir koleksiyonun yazma sahibi tektir. Genel kural, başka bir domain'in veriyi sahibinin yayımladığı servis üzerinden okumasıdır. Kodda bilinçli okuma istisnaları vardır: lojistik, satış faturasını ve içe aktarılmış alış faturasını stok işlemleriyle eşlemek için finance şemalarını salt okuma amacıyla kaydeder. Bu istisna yeni bir yazma sahibi oluşturmaz.
Domain'ler
| Domain | Sorumluluk |
|---|---|
catalog | Ürün, kategori, alıcı kataloğu, favori, piyasa fiyatı ve ürün talebi |
comms | Alıcı mesajları, bildirimleri ve içerik akışı |
finance | Cari, defter, kasa ve banka, POS, tahsilat, havale, fatura ve finans raporları |
logistics | Stok, alım, sayım, depo ve kapsama bölgeleri |
orders | Sepet, checkout, sipariş, ödeme başlatma, teslimat, iade ve iptal |
parties | Müşteri, personel, grup, alıcı profili, adres ve şirket tipi |
v1'deki tek report modülünün karşılığı yoktur. Satış ve alım raporları finans altında; sipariş istatistikleri sipariş alanında yaşar. Ayrıntılı eşleme: Domain haritası.
Güvenlik varsayılanı
JwtGuard ve RolesGuard uygulama genelindedir. Yeni bir controller ayrıca guard eklemese de kimlik doğrulaması ister; açık uçlar @Public() ile işaretlenir.
@Roles()temel kullanıcı tipini denetler.@OfficerRoles()personelin güncel rolünü veritabanından okur.@FinanceRoles()kullanıldığı yazma ve onay uçlarını ADMIN ve desteklenen finans personeli rolleriyle sınırlar.- Yeni BUYER uçlarında sahiplik URL'deki kullanıcı kimliğinden değil, jetondan gelir.
v1'de rol etiketi olup bekçisi bağlanmayan bazı uçların aksine v2'de rol bekçisi globaldir. Taşınan invoice/admin yüzeyi de ADMIN ve OFFICER ile sınırlandırılmıştır.
Depo kapsamı
Yeni muhasebe uçlarında depo kapsamı servis içinde depotOf(userId) ile belirlenir. Kullanıcı:
- yönettiği deponun admin kullanıcısıysa veya
AdminOfficerüzerinden depoya bağlı ve desteklenen finans rolündeyse
o depoya erişebilir. Rol token'dan değil güncel personel kaydından okunur.
Rol kısıtı bütün finans uçlarında aynı dekoratörle uygulanmaz:
- Cari, kasa/banka, tahsilat, havale, POS, fatura içe aktarma ve stok yazmaları
@FinanceRoles()kullanır; bugün desteklenen personel rolüMANAGER'dır. GET /finance/accountsveGET /finance/invoicesgibi bazı yeni okuma uçları controller seviyesinde ADMIN veya herhangi bir OFFICER kabul eder. Hesap listesi kullanıcı kimliğini servis kapsamına taşır; fatura listesi aynı@FinanceRoles()daraltmasını kullanmaz.- Taşınmış
/financial/admin/*ve/invoice/adminuçları kendi v1 uyumluluk sınırlarını korur.
Bu, eski Company ve X-Warehouse-Id planı değildir. Bugünkü v2'de Company tenant modeli ya da genel bir depo bağlamı header'ı yoktur.
HTTP sözleşmesi
Her uç /api genel öneki altında çalışır. Geliştirmede Swagger /swagger yolundadır.
Global doğrulama:
- DTO'da tanımlanmayan alanı silmek yerine
400döndürür. - Tür dönüşümünü açık DTO kurallarıyla yapar.
- Hataları
{ statusCode, path, timestamp, message }zarfında verir.
Yeni sayfalı uçlar { data, page, limit, total, totalPages }, sayfasız listeler { data } biçimini kullanır. Taşınan uçlar ise geçerli v1 yanıtını korur; bu nedenle iki sözleşme geçiş boyunca yan yana bulunur.
v1'den bilinçli farklar
- Katalog araması MeiliSearch yerine doğrudan veritabanından yapılır.
- v2'de uygulama geneli i18n katmanı yoktur.
- Zamanlanmış işler v1'de kalır; v2
opsyüzeyi açıkça çağrılan bakım işlemleridir. - Sipariş sonrası bazı yan etkiler olay yayıcı yerine doğrudan servis çağrılarıyla yürür.
- v2 rapor kuyruğu, v1 işlerini tüketmemek için ayrı Redis/Bull öneki kullanır.
Geçişte hangi servisin hangi veriyi yazdığı için Geçiş ve veri sahipliği sayfasına bakın.