155 lines
4.3 KiB
TypeScript
155 lines
4.3 KiB
TypeScript
import type {
|
||
CustomWorldGalleryDetailResponse,
|
||
CustomWorldGalleryResponse,
|
||
CustomWorldLibraryMutationResponse,
|
||
CustomWorldLibraryResponse,
|
||
} from '../../../packages/shared/src/contracts/runtime';
|
||
import type { CustomWorldProfile } from '../../types';
|
||
import {
|
||
requestPublicRpgCreationRuntimeJson,
|
||
requestRpgCreationRuntimeJson,
|
||
type RpgCreationRuntimeRequestOptions,
|
||
} from './rpgCreationRuntimeClient';
|
||
|
||
export async function listRpgWorldLibrary(
|
||
options: RpgCreationRuntimeRequestOptions = {},
|
||
) {
|
||
const response = await requestRpgCreationRuntimeJson<
|
||
CustomWorldLibraryResponse<CustomWorldProfile>
|
||
>(
|
||
'/custom-world-library',
|
||
{ method: 'GET' },
|
||
'读取自定义世界库失败',
|
||
options,
|
||
);
|
||
|
||
return Array.isArray(response?.entries) ? response.entries : [];
|
||
}
|
||
|
||
export async function upsertRpgWorldProfile(
|
||
profile: CustomWorldProfile,
|
||
request: {
|
||
sourceAgentSessionId?: string | null;
|
||
} = {},
|
||
options: RpgCreationRuntimeRequestOptions = {},
|
||
) {
|
||
const response = await requestRpgCreationRuntimeJson<
|
||
CustomWorldLibraryMutationResponse<CustomWorldProfile>
|
||
>(
|
||
`/custom-world-library/${encodeURIComponent(profile.id)}`,
|
||
{
|
||
method: 'PUT',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({
|
||
profile,
|
||
sourceAgentSessionId: request.sourceAgentSessionId ?? null,
|
||
}),
|
||
},
|
||
'保存自定义世界失败',
|
||
options,
|
||
);
|
||
|
||
return {
|
||
entry: response.entry,
|
||
entries: Array.isArray(response?.entries) ? response.entries : [],
|
||
};
|
||
}
|
||
|
||
export async function deleteRpgWorldProfile(
|
||
profileId: string,
|
||
options: RpgCreationRuntimeRequestOptions = {},
|
||
) {
|
||
const response = await requestRpgCreationRuntimeJson<
|
||
CustomWorldLibraryResponse<CustomWorldProfile>
|
||
>(
|
||
`/custom-world-library/${encodeURIComponent(profileId)}`,
|
||
{ method: 'DELETE' },
|
||
'删除自定义世界失败',
|
||
options,
|
||
);
|
||
|
||
return Array.isArray(response?.entries) ? response.entries : [];
|
||
}
|
||
|
||
export async function publishRpgWorldProfile(
|
||
profileId: string,
|
||
options: RpgCreationRuntimeRequestOptions = {},
|
||
) {
|
||
const response = await requestRpgCreationRuntimeJson<
|
||
CustomWorldLibraryMutationResponse<CustomWorldProfile>
|
||
>(
|
||
`/custom-world-library/${encodeURIComponent(profileId)}/publish`,
|
||
{ method: 'POST' },
|
||
'发布自定义世界失败',
|
||
options,
|
||
);
|
||
|
||
return {
|
||
entry: response.entry,
|
||
entries: Array.isArray(response?.entries) ? response.entries : [],
|
||
};
|
||
}
|
||
|
||
export async function unpublishRpgWorldProfile(
|
||
profileId: string,
|
||
options: RpgCreationRuntimeRequestOptions = {},
|
||
) {
|
||
const response = await requestRpgCreationRuntimeJson<
|
||
CustomWorldLibraryMutationResponse<CustomWorldProfile>
|
||
>(
|
||
`/custom-world-library/${encodeURIComponent(profileId)}/unpublish`,
|
||
{ method: 'POST' },
|
||
'下架自定义世界失败',
|
||
options,
|
||
);
|
||
|
||
return {
|
||
entry: response.entry,
|
||
entries: Array.isArray(response?.entries) ? response.entries : [],
|
||
};
|
||
}
|
||
|
||
export async function listRpgWorldGallery(
|
||
options: RpgCreationRuntimeRequestOptions = {},
|
||
) {
|
||
const response = await requestPublicRpgCreationRuntimeJson<CustomWorldGalleryResponse>(
|
||
'/custom-world-gallery',
|
||
{ method: 'GET' },
|
||
'读取作品广场失败',
|
||
options,
|
||
);
|
||
|
||
return Array.isArray(response?.entries) ? response.entries : [];
|
||
}
|
||
|
||
export async function getRpgWorldGalleryDetail(
|
||
ownerUserId: string,
|
||
profileId: string,
|
||
options: RpgCreationRuntimeRequestOptions = {},
|
||
) {
|
||
const response = await requestPublicRpgCreationRuntimeJson<
|
||
CustomWorldGalleryDetailResponse<CustomWorldProfile>
|
||
>(
|
||
`/custom-world-gallery/${encodeURIComponent(ownerUserId)}/${encodeURIComponent(profileId)}`,
|
||
{ method: 'GET' },
|
||
'读取作品详情失败',
|
||
options,
|
||
);
|
||
|
||
return response.entry;
|
||
}
|
||
|
||
/**
|
||
* 工作包 D 把作品库与作品广场请求迁入 RPG 创作域 client,
|
||
* 后续前端调用优先从这里进入,不再反向依赖通用存储聚合层。
|
||
*/
|
||
export const rpgCreationLibraryClient = {
|
||
listLibrary: listRpgWorldLibrary,
|
||
upsertProfile: upsertRpgWorldProfile,
|
||
deleteProfile: deleteRpgWorldProfile,
|
||
publishProfile: publishRpgWorldProfile,
|
||
unpublishProfile: unpublishRpgWorldProfile,
|
||
listGallery: listRpgWorldGallery,
|
||
getGalleryDetail: getRpgWorldGalleryDetail,
|
||
};
|