1
This commit is contained in:
78
src/editor/shared/editorApiClient.ts
Normal file
78
src/editor/shared/editorApiClient.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import { fetchJson, parseApiErrorMessage, saveJsonObject } from './jsonClient';
|
||||
|
||||
export const EDITOR_API_BASE_PATH = '/api/editor';
|
||||
export const ASSETS_API_BASE_PATH = '/api/assets';
|
||||
|
||||
export const EDITOR_JSON_RESOURCE_IDS = {
|
||||
itemOverrides: 'item-overrides',
|
||||
npcVisualOverrides: 'npc-visual-overrides',
|
||||
npcLayoutConfig: 'npc-layout-config',
|
||||
characterOverrides: 'character-overrides',
|
||||
monsterOverrides: 'monster-overrides',
|
||||
sceneOverrides: 'scene-overrides',
|
||||
sceneNpcOverrides: 'scene-npc-overrides',
|
||||
stateFunctionOverrides: 'state-function-overrides',
|
||||
} as const;
|
||||
|
||||
export type EditorJsonResourceId =
|
||||
(typeof EDITOR_JSON_RESOURCE_IDS)[keyof typeof EDITOR_JSON_RESOURCE_IDS];
|
||||
|
||||
export const ASSET_API_PATHS = {
|
||||
characterVisualGenerate: `${ASSETS_API_BASE_PATH}/character-visual/generate`,
|
||||
characterVisualPublish: `${ASSETS_API_BASE_PATH}/character-visual/publish`,
|
||||
characterVisualJobs: `${ASSETS_API_BASE_PATH}/character-visual/jobs`,
|
||||
characterAnimationGenerate: `${ASSETS_API_BASE_PATH}/character-animation/generate`,
|
||||
characterAnimationPublish: `${ASSETS_API_BASE_PATH}/character-animation/publish`,
|
||||
characterAnimationJobs: `${ASSETS_API_BASE_PATH}/character-animation/jobs`,
|
||||
characterAnimationImportVideo: `${ASSETS_API_BASE_PATH}/character-animation/import-video`,
|
||||
characterAnimationTemplates: `${ASSETS_API_BASE_PATH}/character-animation/templates`,
|
||||
qwenSpriteMaster: `${ASSETS_API_BASE_PATH}/qwen-sprite/master`,
|
||||
qwenSpriteSheet: `${ASSETS_API_BASE_PATH}/qwen-sprite/sheet`,
|
||||
qwenSpriteFrameRepair: `${ASSETS_API_BASE_PATH}/qwen-sprite/frame-repair`,
|
||||
qwenSpriteSave: `${ASSETS_API_BASE_PATH}/qwen-sprite/save`,
|
||||
} as const;
|
||||
|
||||
export const EDITOR_ITEM_CATALOG_API_PATH =
|
||||
`${EDITOR_API_BASE_PATH}/catalog/items`;
|
||||
|
||||
export function buildEditorJsonApiPath(resourceId: EditorJsonResourceId) {
|
||||
return `${EDITOR_API_BASE_PATH}/json/${resourceId}`;
|
||||
}
|
||||
|
||||
export function fetchEditorJsonResource<T>(
|
||||
resourceId: EditorJsonResourceId,
|
||||
fallbackMessage = '读取失败',
|
||||
) {
|
||||
return fetchJson<T>(buildEditorJsonApiPath(resourceId), fallbackMessage);
|
||||
}
|
||||
|
||||
export function saveEditorJsonResource(
|
||||
resourceId: EditorJsonResourceId,
|
||||
payload: Record<string, unknown>,
|
||||
fallbackMessage = '保存失败',
|
||||
) {
|
||||
return saveJsonObject(
|
||||
buildEditorJsonApiPath(resourceId),
|
||||
payload,
|
||||
fallbackMessage,
|
||||
);
|
||||
}
|
||||
|
||||
export async function postApiJson<T>(
|
||||
url: string,
|
||||
payload: Record<string, unknown>,
|
||||
fallbackMessage: string,
|
||||
) {
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
const responseText = await response.text();
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(parseApiErrorMessage(responseText, fallbackMessage));
|
||||
}
|
||||
|
||||
return responseText ? (JSON.parse(responseText) as T) : ({} as T);
|
||||
}
|
||||
Reference in New Issue
Block a user