feat: migrate from Elysia Eden to Contract-First API (OpenAPI)

This commit is contained in:
bipproduction
2026-02-07 18:12:52 +08:00
parent 6abd32650d
commit f0c317837f
10 changed files with 1855 additions and 36 deletions

View File

@@ -68,9 +68,12 @@ function DashboardApikeyComponent() {
const fetchApiKeys = useCallback(async () => {
try {
setLoading(true);
const response = await apiClient.api.apikey.get();
if (response.data) {
setApiKeys((response.data.apiKeys as any) || []);
const { data, error } = await apiClient.GET("/api/apikey/");
if (data) {
setApiKeys((data.apiKeys as any) || []);
}
if (error) {
setError("Failed to load API keys");
}
} catch (err) {
setError("Failed to load API keys");
@@ -92,19 +95,24 @@ function DashboardApikeyComponent() {
try {
setCreating(true);
const response = await apiClient.api.apikey.post({
name: newKeyName,
expiresAt: newKeyExpiresAt
? dayjs(newKeyExpiresAt).toISOString()
: undefined,
const { data, error } = await apiClient.POST("/api/apikey/", {
body: {
name: newKeyName,
expiresAt: newKeyExpiresAt
? dayjs(newKeyExpiresAt).toISOString()
: undefined,
},
});
if (response.data) {
setApiKeys([...apiKeys, response.data.apiKey as any]);
if (data) {
setApiKeys([...apiKeys, data.apiKey as any]);
setNewKeyName("");
setNewKeyExpiresAt(null);
setCreateModalOpen(false);
}
if (error) {
setError("Failed to create API key");
}
} catch (err) {
setError("Failed to create API key");
console.error(err);
@@ -119,18 +127,23 @@ function DashboardApikeyComponent() {
setError("API key ID is required");
return;
}
const response = await apiClient.api.apikey.update.post({
id,
isActive: !currentStatus,
const { data, error } = await apiClient.POST("/api/apikey/update", {
body: {
id,
isActive: !currentStatus,
},
});
if (response.data) {
if (data) {
setApiKeys(
apiKeys.map((key) =>
key.id === id ? { ...key, isActive: !currentStatus } : key,
),
);
}
if (error) {
setError("Failed to update API key status");
}
} catch (err) {
setError("Failed to update API key status");
console.error(err);
@@ -147,12 +160,18 @@ function DashboardApikeyComponent() {
if (!keyToDelete) return;
try {
await apiClient.api.apikey.delete.post({
id: keyToDelete,
const { error } = await apiClient.POST("/api/apikey/delete", {
body: {
id: keyToDelete,
},
});
setApiKeys(apiKeys.filter((key: ApiKey) => key.id !== keyToDelete));
setDeleteModalOpen(false);
setKeyToDelete(null);
if (!error) {
setApiKeys(apiKeys.filter((key: ApiKey) => key.id !== keyToDelete));
setDeleteModalOpen(false);
setKeyToDelete(null);
} else {
setError("Failed to delete API key");
}
} catch (err) {
setError("Failed to delete API key");
console.error(err);