fix(api): align frontend with REST contracts

This commit is contained in:
2026-07-30 20:38:52 +08:00
parent b57e58ff87
commit 782363cfb6
65 changed files with 99362 additions and 318 deletions
+25 -3
View File
@@ -15,10 +15,22 @@ export const api = axios.create({
let isSigningOut = false;
const resolveRequestUrl = (request: {
export const resolveRequestUrl = (request: {
baseURL?: string;
url?: string;
}) => `${request.baseURL ?? ""}${request.url ?? ""}`;
}) => {
const requestUrl = request.url ?? "";
if (/^([a-z][a-z\d+\-.]*:)?\/\//i.test(requestUrl)) {
return requestUrl;
}
const baseURL = request.baseURL ?? "";
if (!baseURL || !requestUrl) {
return `${baseURL}${requestUrl}`;
}
return `${baseURL.replace(/\/+$/, "")}/${requestUrl.replace(/^\/+/, "")}`;
};
export interface ApiRequestConfig
extends InternalAxiosRequestConfig,
@@ -38,7 +50,17 @@ api.interceptors.request.use(async (request: ApiRequestConfig) => {
});
api.interceptors.response.use(
(response) => response,
(response) => {
if (
response.data &&
typeof response.data === "object" &&
Array.isArray(response.data.items) &&
typeof response.data.total === "number"
) {
response.data = response.data.items;
}
return response;
},
async (error) => {
if (error?.response?.status === 401 && typeof window !== "undefined") {
useAuthStore.getState().setAccessToken(null);