refactor(fe): align dashboard with backend & gateway data flow
- API/WS clients: same-origin by default, drop dead imphnen hardcode
- chatbot history: map BE rows {user_message,bot_response,created_at}
- message_deleted WS payload: object {id,deleted_at}, not bare string
- dashboard: wire top-channels chart + live mod queue from /api/review,
add Users & Channels tabs consuming /api/dashboard/users|channels
- recordings: live WS sync via voice_recording_uploaded; duration_bytes optional
- remove dead widgets with no BE data source (trend chart, heatmap)
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
import type { ChatbotResponse, ChatHistoryMessage } from "@/lib/types";
|
||||
import type { ChatbotHistoryRow, ChatbotResponse } from "@/lib/types";
|
||||
import { api } from "./client";
|
||||
|
||||
export const chatbotApi = {
|
||||
send: (message: string) =>
|
||||
api.post<ChatbotResponse>("/api/chat", { message }),
|
||||
|
||||
getHistory: () => api.get<ChatHistoryMessage[]>("/api/chat/history"),
|
||||
getHistory: () =>
|
||||
api.get<{ history: ChatbotHistoryRow[]; total: number }>(
|
||||
"/api/chat/history",
|
||||
),
|
||||
|
||||
clearHistory: () => api.delete<{ ok: boolean }>("/api/chat/history"),
|
||||
};
|
||||
|
||||
@@ -8,21 +8,23 @@ export class ApiError extends Error {
|
||||
}
|
||||
}
|
||||
|
||||
const REMOTE_API = "https://imphnen.asepharyana.my.id";
|
||||
|
||||
/**
|
||||
* API base URL resolution.
|
||||
*
|
||||
* Default: same-origin — the production nginx (gmw-proxy) proxies /api/* to
|
||||
* the backend, so no cross-origin config is needed. For local dev against a
|
||||
* remote deployment, set NEXT_PUBLIC_API_URL (e.g. https://imphnen.asepharyana.my.id).
|
||||
*/
|
||||
function getBaseUrl(): string {
|
||||
if (typeof window === "undefined") return REMOTE_API;
|
||||
const hostname = window.location.hostname;
|
||||
const override =
|
||||
typeof process !== "undefined" ? process.env.NEXT_PUBLIC_API_URL : "";
|
||||
if (override) return override.replace(/\/+$/, "");
|
||||
|
||||
// In local dev, route API calls to the remote server
|
||||
if (hostname === "localhost" || hostname === "127.0.0.1") {
|
||||
return REMOTE_API;
|
||||
}
|
||||
if (typeof window === "undefined") return "";
|
||||
|
||||
// Production: nginx proxies /api/* to backend on the same host
|
||||
const protocol = window.location.protocol.replace(":", "");
|
||||
const port = window.location.port;
|
||||
return `${protocol}://${hostname}${port ? `:${port}` : ""}`;
|
||||
return `${protocol}://${window.location.hostname}${port ? `:${port}` : ""}`;
|
||||
}
|
||||
|
||||
export async function apiRequest<T>(
|
||||
|
||||
Reference in New Issue
Block a user