Commit 0ba364cd authored by Lê Bảo Hồng Đức's avatar Lê Bảo Hồng Đức

[tag]0.1-vcci

parents 1a6e3d53 24f675cf
Pipeline #52570 passed with stages
in 3 minutes and 22 seconds
...@@ -2,56 +2,49 @@ import { NextResponse } from "next/server"; ...@@ -2,56 +2,49 @@ import { NextResponse } from "next/server";
import { MOCK_FEATURED_MEMBERS_RESPONSE } from "@/app/api/mock-data"; import { MOCK_FEATURED_MEMBERS_RESPONSE } from "@/app/api/mock-data";
const BACKEND_HOST = process.env.NEXT_PUBLIC_BACKEND_HOST || "https://news.vccihcm.vn"; const BACKEND_HOST = process.env.NEXT_PUBLIC_BACKEND_HOST || "https://news.vccihcm.vn";
const FEATURED_MEMBER_API_URL = `${BACKEND_HOST.replace(/\/+$/, "")}/api/v1.0/vcci/featured-members`; const BACKEND_FEATURED_MEMBER_API_URL = `${BACKEND_HOST.replace(/\/+$/, "")}/api/v1.0/vcci/featured-members`;
// Fallback: gọi trực tiếp VCCI HCM API // Ưu tiên gọi trực tiếp VCCI HCM API (BE hiện chưa có endpoint này)
const FALLBACK_FEATURED_MEMBER_API_URL = const VCCI_FEATURED_MEMBER_API_URL =
"https://vccihcm.vn/api/v1.0/organizations" + "https://vccihcm.vn/api/v1.0/organizations" +
"?filters=users.status_id+%3D%3D+36ca1cc5-7b6e-4f9f-b973-69c5207deb62" + "?filters=users.status_id+%3D%3D+36ca1cc5-7b6e-4f9f-b973-69c5207deb62" +
"&pageSize=12&sortField=created_at&sortOrder=ASC"; "&pageSize=12&sortField=created_at&sortOrder=ASC";
export async function GET() { export async function GET() {
// 1) Ưu tiên VCCI HCM API
try { try {
const response = await fetch(FEATURED_MEMBER_API_URL, { const response = await fetch(VCCI_FEATURED_MEMBER_API_URL, {
headers: { Accept: "application/json" }, headers: { Accept: "application/json" },
next: { revalidate: 300 }, next: { revalidate: 300 },
}); });
if (!response.ok) { if (response.ok) {
console.warn( const data = await response.json();
`[api/featured-members] upstream returned ${response.status}, trying fallback`, return NextResponse.json(data);
);
// Thử fallback - gọi trực tiếp VCCI HCM API
return tryFallback();
} }
const data = await response.json(); console.warn(`[api/featured-members] VCCI API returned ${response.status}, trying backend`);
return NextResponse.json(data);
} catch (error) { } catch (error) {
console.error("[api/featured-members] upstream failed, trying fallback", error); console.error("[api/featured-members] VCCI API failed, trying backend", error);
return tryFallback();
} }
}
async function tryFallback() { // 2) Fallback: BE endpoint (nếu có)
try { try {
const fallbackResponse = await fetch(FALLBACK_FEATURED_MEMBER_API_URL, { const response = await fetch(BACKEND_FEATURED_MEMBER_API_URL, {
headers: { Accept: "application/json" }, headers: { Accept: "application/json" },
next: { revalidate: 300 }, next: { revalidate: 300 },
}); });
if (!fallbackResponse.ok) { if (response.ok) {
console.warn( const data = await response.json();
`[api/featured-members] fallback returned ${fallbackResponse.status}, serving mock data`, return NextResponse.json(data);
);
return NextResponse.json(MOCK_FEATURED_MEMBERS_RESPONSE, { status: 200 });
} }
const data = await fallbackResponse.json(); console.warn(`[api/featured-members] backend returned ${response.status}, serving mock data`);
console.log("[api/featured-members] served from fallback");
return NextResponse.json(data);
} catch (error) { } catch (error) {
console.error("[api/featured-members] fallback failed, serving mock data", error); console.error("[api/featured-members] backend failed, serving mock data", error);
return NextResponse.json(MOCK_FEATURED_MEMBERS_RESPONSE, { status: 200 });
} }
// 3) Cuối cùng: mock data
return NextResponse.json(MOCK_FEATURED_MEMBERS_RESPONSE, { status: 200 });
} }
...@@ -2,56 +2,49 @@ import { NextResponse } from "next/server"; ...@@ -2,56 +2,49 @@ import { NextResponse } from "next/server";
import { MOCK_PARTNERS_RESPONSE } from "@/app/api/mock-data"; import { MOCK_PARTNERS_RESPONSE } from "@/app/api/mock-data";
const BACKEND_HOST = process.env.NEXT_PUBLIC_BACKEND_HOST || "https://news.vccihcm.vn"; const BACKEND_HOST = process.env.NEXT_PUBLIC_BACKEND_HOST || "https://news.vccihcm.vn";
const PARTNER_API_URL = `${BACKEND_HOST.replace(/\/+$/, "")}/api/v1.0/vcci/partners`; const BACKEND_PARTNER_API_URL = `${BACKEND_HOST.replace(/\/+$/, "")}/api/v1.0/vcci/partners`;
// Fallback: gọi trực tiếp VCCI HCM API // Ưu tiên gọi trực tiếp VCCI HCM API (BE hiện chưa có endpoint này)
const FALLBACK_PARTNER_API_URL = const VCCI_PARTNER_API_URL =
"https://vccihcm.vn/api/v1.0/organizations" + "https://vccihcm.vn/api/v1.0/organizations" +
"?filters=type%3D%3DSPONSOR&pageSize=12" + "?filters=type%3D%3DSPONSOR&pageSize=12" +
"&sortField=sort_order&sortOrder=ASC"; "&sortField=sort_order&sortOrder=ASC";
export async function GET() { export async function GET() {
// 1) Ưu tiên VCCI HCM API
try { try {
const response = await fetch(PARTNER_API_URL, { const response = await fetch(VCCI_PARTNER_API_URL, {
headers: { Accept: "application/json" }, headers: { Accept: "application/json" },
next: { revalidate: 300 }, next: { revalidate: 300 },
}); });
if (!response.ok) { if (response.ok) {
console.warn( const data = await response.json();
`[api/partners] upstream returned ${response.status}, trying fallback`, return NextResponse.json(data);
);
// Thử fallback - gọi trực tiếp VCCI HCM API
return tryFallback();
} }
const data = await response.json(); console.warn(`[api/partners] VCCI API returned ${response.status}, trying backend`);
return NextResponse.json(data);
} catch (error) { } catch (error) {
console.error("[api/partners] upstream failed, trying fallback", error); console.error("[api/partners] VCCI API failed, trying backend", error);
return tryFallback();
} }
}
async function tryFallback() { // 2) Fallback: BE endpoint (nếu có)
try { try {
const fallbackResponse = await fetch(FALLBACK_PARTNER_API_URL, { const response = await fetch(BACKEND_PARTNER_API_URL, {
headers: { Accept: "application/json" }, headers: { Accept: "application/json" },
next: { revalidate: 300 }, next: { revalidate: 300 },
}); });
if (!fallbackResponse.ok) { if (response.ok) {
console.warn( const data = await response.json();
`[api/partners] fallback returned ${fallbackResponse.status}, serving mock data`, return NextResponse.json(data);
);
return NextResponse.json(MOCK_PARTNERS_RESPONSE, { status: 200 });
} }
const data = await fallbackResponse.json(); console.warn(`[api/partners] backend returned ${response.status}, serving mock data`);
console.log("[api/partners] served from fallback");
return NextResponse.json(data);
} catch (error) { } catch (error) {
console.error("[api/partners] fallback failed, serving mock data", error); console.error("[api/partners] backend failed, serving mock data", error);
return NextResponse.json(MOCK_PARTNERS_RESPONSE, { status: 200 });
} }
// 3) Cuối cùng: mock data
return NextResponse.json(MOCK_PARTNERS_RESPONSE, { status: 200 });
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment