feat(about): sync FE-BE data and image upload

This commit is contained in:
2026-02-06 01:58:56 +07:00
parent fb8676879d
commit 8232a36e71
16 changed files with 1096 additions and 2821 deletions

View File

@@ -4,8 +4,8 @@
* @returns {Object} - Dữ liệu đã được xử lý với đường dẫn hình ảnh đầy đủ
*/
function addBaseUrlToImages(data, baseUrl) {
// baseUrl can be passed explicitly (e.g., from req), otherwise fall back to env
const BACKEND_URL = baseUrl || process.env.BACKEND_URL || "";
// Use passed baseUrl, then env var, then default to localhost:3001
const BACKEND_URL = (baseUrl || process.env.BACKEND_URL || "http://localhost:3001").replace(/\/$/, "");
// Tạo bản sao sâu để tránh thay đổi dữ liệu gốc
const processedData = JSON.parse(JSON.stringify(data));
@@ -14,16 +14,27 @@ function addBaseUrlToImages(data, baseUrl) {
const processObject = (obj) => {
if (!obj || typeof obj !== "object") return;
Object.keys(obj).forEach((key) => {
// Kiểm tra nếu thuộc tính chứa đường dẫn hình ảnh bắt đầu bằng /uploads/
if (typeof obj[key] === "string" && obj[key].startsWith("/uploads/")) {
// Thêm BACKEND_URL nếu đường dẫn chưa có http
if (!obj[key].startsWith("http")) {
obj[key] = `${BACKEND_URL}${obj[key]}`;
if (Array.isArray(obj)) {
obj.forEach((item, index) => {
if (typeof item === "string" && (item.startsWith("/uploads/") || item.startsWith("/assets/img/"))) {
if (!item.startsWith("http")) {
obj[index] = `${BACKEND_URL}${item}`;
}
} else if (typeof item === "object") {
processObject(item);
}
} else if (typeof obj[key] === "object") {
// Đệ quy xử lý các đối tượng và mảng lồng nhau
processObject(obj[key]);
});
return;
}
Object.keys(obj).forEach((key) => {
const value = obj[key];
if (typeof value === "string" && (value.startsWith("/uploads/") || value.startsWith("/assets/img/"))) {
if (!value.startsWith("http")) {
obj[key] = `${BACKEND_URL}${value}`;
}
} else if (value && typeof value === "object") {
processObject(value);
}
});
};