Code Structure — Novu Infrastructure Full Disclosure#
Hệ thống Novu được thiết kế theo kiến trúc Monorepo quy mô lớn, sử dụng NX Cloud để quản lý hàng chục ứng dụng và thư viện liên kết chặt chẽ. Cấu trúc này đảm bảo tính nhất quán (Consistency) tuyệt đối về kiểu dữ liệu (Types) xuyên suốt từ Mobile, Web đến Backend.
I. Sơ đồ Phân cấp Kỹ thuật (Monorepo Graph)#
Kiến trúc NX của Novu cho phép các gói thư viện (Libs) và mã nguồn (Apps) chia sẻ logic một cách an toàn thông qua đồ thị phụ thuộc (Dependency Graph):
II. Phân tích chi tiết Dịch vụ (Apps)#
Toàn bộ các thư mục trong /apps là những bộ máy vận hành độc lập.1. API Service (apps/api/)#
Logic: NestJS Backend. Đóng vai trò là cửa ngõ duy nhất tiếp nhận Trigger từ Clients và quản lý Dashboard.
Chức năng: Quản lý Authentication (JWT/Passport), phân quyền RBAC, và điều chuyển Job vào hàng đợi Redis.
2. Worker Service (apps/worker/)#
Logic: Xử lý không đồng bộ (Asynchronous).
Chức năng: Nhận Job từ API qua BullMQ. Thực hiện bóc tách Handlebars templates, tính toán thời gian Digest (Gom tin), và gọi Provider để gửi tin Message thực tế.
3. WS Service (apps/ws/)#
Chức năng: Chốt chặn Websocket. Cung cấp kết nối Persistent tới Notification Center (Widget) của khách để đẩy thông báo In-app ngay lập tức.
4. Dashboard & Inbound (apps/dashboard/ & apps/webhook/)#
Dashboard: Dashboard quản trị viết bằng React + Tailwind.
Webhook: Xử lý các đầu báo trạng thái (Deliver/Fail/Open) từ các bên thứ ba trả về (Twilio/SendGrid Webhooks).
III. Phân tích sâu Thư viện & Module (Libs)#
Thư mục /libs chứa các bit logic cực kỳ quan trọng không bao giờ bị lặp lại (DRY Principle).1. Data Access Layer (libs/dal/)#
Nghiệp vụ: Toàn bộ định nghĩa Schema MongoDB và các Repository Pattern.
Đặc điểm: Đảm bảo mọi App (API, Worker) khi truy vấn Subscribers hay Workflows đều dùng chung một bộ Schema duy nhất.
2. Shared Core (libs/shared/)#
Nghiệp vụ: Chứa hàng ngàn Interfaces, Enums, DTOs.
Ví dụ: Enum ChannelTypeEnum xác định EMAIL/SMS/PUSH được dùng chung cả phía Client (React) và Server (NodeJS).
IV. Hệ sinh thái Mở rộng (Packages)#
/packages là nơi Novu biến mình thành một nền tảng hạ tầng (Infrastructure).1. Providers (packages/providers/)#
Chứa danh sách hàng trăm Provider Plugin. Mỗi Plugin thực hiện map chuẩn Novu Message sang chuẩn riêng của bên thứ ba (VD: Firebase Cloud Messaging, SES, OneSignal).
2. Notification Center (packages/notification-center/)#
Bộ mã nguồn UI/UX cho In-app Bell icon. Hỗ trợ cho cả React, Vue, Angular và Web Components dạng nhúng.
3. Developers SDKs (packages/node/, packages/react/)#
Dành cho lập trình viên phát triển ứng dụng bằng Novu. Chứa logic gói gọn (Wrapper) các API call phức tạp thành các hàm đơn giản như novu.trigger().
Dự án sử dụng các bộ kịch bản tự động tại /scripts để vận hành Monorepo:NX Pipeline: Kiểm tra thay đổi và chỉ build những bộ phận bị ảnh hưởng (Affected build) để tiết kiệm tài nguyên CI/CD.
Setup Script: scripts/dev-environment-setup.sh tự động khởi tạo database và môi trường cho Developer mới chỉ bằng 1 câu lệnh.
Build Optimization: Tự động hóa quá trình compile đa nền tảng (Polyglot builds).
Modified at 2026-03-27 03:49:16