# Lucenva Backend — Ghi chú các lỗi đã sửa (17/08/2026)

## 1. Nguyên nhân THẬT khiến admin không khởi động trên server
`node_modules` trong bản zip được cài trên **Windows** (log cho thấy `C:\LucenvaKorea`),
nhưng server TenTen chạy **Linux**. Các gói native (rollup của AdminJS bundler) không khớp
nền tảng → gây chuỗi lỗi `No "exports" main defined`, `AdminJS.bundle is not a function`,
`WRONG PROVIDER OPTIONS` khi khởi động.

=> Cấu hình AdminJS / @adminjs/upload / CloudinaryProvider trong code THỰC RA ĐÚNG.
   Sau khi cài lại sạch trên Linux, setupAdmin() chạy tới bước kết nối DB bình thường.

### Cách xử lý trên server (BẮT BUỘC):
```bash
cd backend
rm -rf node_modules package-lock.json
npm install
node rebuild-admin.js       # build lại giao diện admin
pm2 restart lucenva          # hoặc restart Passenger
```

## 2. Sửa sai tên field ở resource Đơn Hàng (Orders)
Model Order dùng snake_case (`customer_name`, `total_price`) nhưng adminSetup.js lại
khai báo `customerName`, `total` → cột "Tên khách hàng" và "Tổng tiền" hiển thị trống.
Đã sửa translations + thêm listProperties/showProperties + format tiền tệ cho total_price.

## 3. rebuild-admin.js không chạy được vì đòi DB
Đã thêm tham số `setupAdmin({ buildOnly: true })`: khi chỉ build bundle giao diện thì
BỎ QUA kết nối MySQL (không tạo session store, không dựng authenticated router).
Giờ `node rebuild-admin.js` chạy được kể cả khi chưa có DB.

## 4. Bảo mật
- Cookie session admin: thêm `httpOnly`, `secure` (khi NODE_ENV=production), `sameSite: 'lax'`.
- CORS: bỏ cho phép `origin === 'null'` (tránh request từ file:// / sandboxed iframe).
- Thêm rate limiter riêng cho `/admin/login`: tối đa 10 lần đăng nhập sai / 15 phút / IP.
- server.js: bắt lỗi EADDRINUSE khi cổng bị chiếm, log rõ ràng thay vì crash mù.

## 5. Product.id
Đổi từ `Math.random()` (có thể trùng) sang uuid để mã sản phẩm không đụng nhau.

## ⚠️ 6. ROTATE SECRET NGAY
File `backend/.env` đã bị đóng gói trong zip → lộ secret thật. Hãy đổi lại TẤT CẢ:
- JWT_SECRET
- ADMIN_COOKIE_SECRET
- VNP_HASHSECRET (VNPay)
- TELEGRAM_BOT_TOKEN
- SMTP_PASS
- Mật khẩu DB cPanel (nếu đã dùng thật)
`.gitignore` đã loại `.env` khỏi git rồi, nhưng lần này lộ qua zip nên vẫn phải đổi.
