code/homework/client/src/api/settings.ts
2024-12-20 19:37:43 +08:00

196 lines
4.3 KiB
TypeScript

import {
SubmitSettingsPayload,
SubmitSettingsResponse,
GetSettingsResponse,
CodeState,
GetCodeDetailsResponse,
UpdateSettingsPayload,
UpdateSettingsResponse,
DeleteSettingsResponse,
} from "../types/codeTypes";
import axios from "axios";
const axiosInstance = axios.create({
headers: {
"Content-Type": "application/json",
},
});
export const submitSettings = async (
payload: SubmitSettingsPayload,
): Promise<SubmitSettingsResponse> => {
try {
const response = await axiosInstance.post<SubmitSettingsResponse>(
"/api/tab",
payload,
);
const data = {
data: response.data.data,
success: true,
message: response.data.message,
};
return data;
} catch (error: any) {
if (error.response) {
return {
success: false,
data: "",
message: error.response.data.message || "提交失败",
};
} else if (error.request) {
return {
success: false,
data: "",
message: "未收到服务器响应",
};
} else {
return {
success: false,
data: "",
message: "提交过程中发生错误",
};
}
}
};
export const updateCodeDetails = async (
id: string,
payload: UpdateSettingsPayload,
): Promise<UpdateSettingsResponse> => {
try {
const response = await axiosInstance.put<UpdateSettingsResponse>(
`/api/tab/${id}`,
payload,
);
const data = {
data: response.data.data,
success: true,
message: response.data.message,
};
return data;
} catch (error: any) {
if (error.response) {
return {
success: false,
data: "",
message: error.response.data.message || "更新失败",
};
} else if (error.request) {
return {
success: false,
data: "",
message: "未收到服务器响应",
};
} else {
return {
success: false,
data: "",
message: "提交过程中发生错误",
};
}
}
};
export const getSettings = async (): Promise<GetSettingsResponse> => {
try {
const response = await axiosInstance.get<GetSettingsResponse>("api/tab");
const data = {
tabs: response.data.tabs,
success: true,
message: response.data.message,
};
return data;
} catch (error: any) {
return {
success: false,
tabs: [
{
id: "",
tabs: [],
activeTabKey: "",
editorSettings: {
theme: "vs-dark",
},
title: "",
label: [],
content: "",
isEncrypted: false,
password: "",
date: "",
submitTime: "",
},
],
message: "获取代码详情失败。",
};
}
};
export const getCodeDetails = async (
id: string,
): Promise<GetCodeDetailsResponse> => {
try {
const response = await axiosInstance.get<GetCodeDetailsResponse>(
`/api/tab/${id}`,
);
const code: CodeState = response.data.data;
return {
success: true,
data: code,
message: "获取成功",
};
} catch (error: any) {
console.error("获取代码详情时出错:", error);
return {
success: false,
data: {
id: "",
tabs: [],
activeTabKey: "",
editorSettings: {
theme: "vs-dark",
},
title: "",
label: [],
content: "",
isEncrypted: false,
password: "",
date: "",
submitTime: "",
},
message: "获取代码详情失败。", // 可选的错误消息
};
}
};
export const deleteSettings = async (
id: string,
): Promise<DeleteSettingsResponse> => {
try {
const response = await axiosInstance.delete<DeleteSettingsResponse>(
`/api/tab/${id}`,
);
const data = {
data: response.data.data,
success: true,
message: response.data.message,
};
return data;
} catch (error: any) {
if (error.response) {
return {
success: false,
data: "",
message: error.response.data.message || "删除失败",
};
} else if (error.request) {
return {
success: false,
data: "",
message: "未收到服务器响应",
};
} else {
return {
success: false,
data: "",
message: "删除过程中发生错误",
};
}
}
};