Dựa vào mã nguồn của dự án, hệ thống đang sử dụng kiến trúc Hybrid Backend (kết hợp giữa Backend-as-a-Service và Custom API Server), cụ thể như sau:
1. Nền tảng chính: Supabase (BaaS)
Phần lớn các tác vụ dữ liệu của hệ thống được quản lý trực tiếp qua Supabase (PostgreSQL):
- Tương tác trực tiếp: Frontend gọi thẳng xuống Database thông qua thư viện
@supabase/supabase-js. - Database Rules & RPCs: Hệ thống sử dụng rất nhiều hàm RPC (Remote Procedure Call) của PostgreSQL để xử lý các logic phức tạp, thao tác nhiều bảng (atomic transactions) thay vì xử lý trên server. Điều này được thể hiện rõ qua các script đồng bộ hóa RPC (
npm run rpc:check). - Data Safety Guard: Frontend sử dụng các file như
src/lib/db-guard.tsđể đảm bảo an toàn ghi dữ liệu (ví dụ: dùngsafeUpsertthay vìinserttrực tiếp).
2. Custom API Server (Node.js)
Bên cạnh Supabase, dự án cũng xây dựng một RESTful API server độc lập (đặt tại thư mục server/). Server này được dùng để xử lý những business logic riêng biệt hoặc đóng vai trò như một BFF (Backend-For-Frontend). Stack công nghệ của server này bao gồm:
- Framework: Hono - Một web framework cực nhanh và nhẹ.
- ORM: Drizzle ORM (
drizzle-orm,drizzle-kit) để tương tác với PostgreSQL, quản lý schema thay vì gọi qua Supabase client. - Validation: Zod (
@hono/zod-validator) để kiểm tra dữ liệu đầu vào. - API Routes: Đã dựng sẵn các API endpoint tại version v1 như
/api/v1/customers,/api/v1/orders,/api/v1/suppliers. - Runtime & Build: Chạy bằng Node.js thông qua
tsxở chế độ dev và dùngtsupđể build ra bản production.
Tóm lại: Dự án áp dụng mô hình lai (hybrid). Các tính năng CRUD cơ bản hoặc logic có thể đưa xuống tầng Database sẽ được frontend gọi thẳng qua Supabase (RPC/Client). Với các logic đặc thù hoặc có thể cần tích hợp bên thứ ba, hệ thống sẽ gọi thông qua Custom Backend Hono + Drizzle ORM.
