mirror of
https://github.com/ZeroCatDev/Classworks.git
synced 2025-10-22 10:23:09 +00:00
162 lines
4.4 KiB
JavaScript
162 lines
4.4 KiB
JavaScript
import axios from "@/axios/axios";
|
|
import { formatResponse, formatError } from "../dataProvider";
|
|
import { getSetting } from "../settings";
|
|
|
|
// Helper function to get request headers with kvtoken
|
|
const getHeaders = () => {
|
|
const headers = { Accept: "application/json" };
|
|
const kvToken = getSetting("server.kvToken");
|
|
const siteKey = getSetting("server.siteKey");
|
|
|
|
// 优先使用新的kvToken
|
|
if (kvToken) {
|
|
headers["x-app-token"] = kvToken;
|
|
} else if (siteKey) {
|
|
// 向后兼容旧的siteKey
|
|
headers["x-site-key"] = siteKey;
|
|
}
|
|
|
|
return headers;
|
|
};
|
|
|
|
export const kvServerProvider = {
|
|
async loadNamespaceInfo() {
|
|
try {
|
|
// 使用 Classworks Cloud 或者用户配置的服务器域名
|
|
const provider = getSetting("server.provider");
|
|
const serverUrl = getSetting("server.domain");
|
|
|
|
const res = await axios.get(`${serverUrl}/kv/_info`, {
|
|
headers: getHeaders(),
|
|
});
|
|
|
|
// 直接返回新格式 API 数据,包含 device 和 account 信息
|
|
return formatResponse(res.data);
|
|
} catch (error) {
|
|
console.error("获取命名空间信息失败:", error);
|
|
return formatError(
|
|
error.response?.data?.message || "获取命名空间信息失败",
|
|
"NAMESPACE_ERROR"
|
|
);
|
|
}
|
|
},
|
|
|
|
async updateNamespaceInfo(data) {
|
|
try {
|
|
const serverUrl = getSetting("server.domain");
|
|
|
|
const res = await axios.put(`${serverUrl}/kv/_info`, data, {
|
|
headers: getHeaders(),
|
|
});
|
|
|
|
return res;
|
|
} catch (error) {
|
|
return formatError(
|
|
error.response?.data?.message || "更新命名空间信息失败",
|
|
"NAMESPACE_ERROR"
|
|
);
|
|
}
|
|
},
|
|
|
|
async loadData(key) {
|
|
try {
|
|
const serverUrl = getSetting("server.domain");
|
|
|
|
const res = await axios.get(`${serverUrl}/kv/${key}`, {
|
|
headers: getHeaders(),
|
|
});
|
|
|
|
return formatResponse(res.data);
|
|
} catch (error) {
|
|
if (error.response?.status === 404) {
|
|
return formatError("数据不存在", "NOT_FOUND");
|
|
}
|
|
console.log(error);
|
|
return formatError(
|
|
error.response?.data?.message || "服务器连接失败",
|
|
"NETWORK_ERROR"
|
|
);
|
|
}
|
|
},
|
|
|
|
async saveData(key, data) {
|
|
try {
|
|
const serverUrl = getSetting("server.domain");
|
|
await axios.post(`${serverUrl}/kv/${key}`, data, {
|
|
headers: getHeaders(),
|
|
});
|
|
return formatResponse(true);
|
|
} catch (error) {
|
|
console.log(error);
|
|
return formatError(
|
|
error.response?.data?.message || "保存失败",
|
|
"SAVE_ERROR"
|
|
);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 获取键名列表
|
|
* @param {Object} options - 查询选项
|
|
* @param {string} options.sortBy - 排序字段,默认为 "key"
|
|
* @param {string} options.sortDir - 排序方向,"asc" 或 "desc",默认为 "asc"
|
|
* @param {number} options.limit - 每页返回的记录数,默认为 100
|
|
* @param {number} options.skip - 跳过的记录数,默认为 0
|
|
* @returns {Promise<Object>} 包含键名列表和分页信息的响应对象
|
|
*
|
|
* 返回值示例:
|
|
* {
|
|
* keys: ["key1", "key2", "key3"],
|
|
* total_rows: 150,
|
|
* current_page: {
|
|
* limit: 10,
|
|
* skip: 0,
|
|
* count: 10
|
|
* },
|
|
* load_more: "/api/kv/namespace/_keys?sortBy=key&sortDir=asc&limit=10&skip=10"
|
|
* }
|
|
*/
|
|
async loadKeys(options = {}) {
|
|
try {
|
|
const serverUrl = getSetting("server.domain");
|
|
|
|
// 设置默认参数
|
|
const {
|
|
sortBy = "key",
|
|
sortDir = "asc",
|
|
limit = 100,
|
|
skip = 0
|
|
} = options;
|
|
|
|
// 构建查询参数
|
|
const params = new URLSearchParams({
|
|
sortBy,
|
|
sortDir,
|
|
limit: limit.toString(),
|
|
skip: skip.toString()
|
|
});
|
|
|
|
const res = await axios.get(`${serverUrl}/kv/_keys?${params}`, {
|
|
headers: getHeaders(),
|
|
});
|
|
|
|
return formatResponse(res.data);
|
|
} catch (error) {
|
|
if (error.response?.status === 404) {
|
|
return formatError("命名空间不存在", "NOT_FOUND");
|
|
}
|
|
if (error.response?.status === 403) {
|
|
return formatError("无权限访问此命名空间", "PERMISSION_DENIED");
|
|
}
|
|
if (error.response?.status === 401) {
|
|
return formatError("认证失败", "UNAUTHORIZED");
|
|
}
|
|
console.log(error);
|
|
return formatError(
|
|
error.response?.data?.message || "获取键名列表失败",
|
|
"NETWORK_ERROR"
|
|
);
|
|
}
|
|
},
|
|
};
|