Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

v2 mimarisi

Alanlara ayrılmış ikinci servis

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

KatmanGöreviBağımlılık kuralı
src/coreKimlik, 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 taraflarBaşka alanın verisini tercihen o alanın yayımladığı servis üzerinden okur
src/opsRapor yeniden kurma, fatura KDV kırılımı gibi yönetim işlemleriPanel ü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

DomainSorumluluk
catalogÜrün, kategori, alıcı kataloğu, favori, piyasa fiyatı ve ürün talebi
commsAlıcı mesajları, bildirimleri ve içerik akışı
financeCari, defter, kasa ve banka, POS, tahsilat, havale, fatura ve finans raporları
logisticsStok, alım, sayım, depo ve kapsama bölgeleri
ordersSepet, checkout, sipariş, ödeme başlatma, teslimat, iade ve iptal
partiesMüş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/accounts ve GET /finance/invoices gibi 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/admin uç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 400 dö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 ops yü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.