Preserve partial creation replies on stream failure
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
kdletters
2026-05-05 11:31:50 +08:00
parent 100fee7e7a
commit 995661e7cc
299 changed files with 13805 additions and 1429 deletions

View File

@@ -0,0 +1,113 @@
import type {
PutSquareHoleWorkRequest,
SquareHoleWorkDetailResponse,
SquareHoleWorkMutationResponse,
SquareHoleWorksResponse,
} from '../../../packages/shared/src/contracts/squareHoleWorks';
import { type ApiRetryOptions, requestJson } from '../apiClient';
const SQUARE_HOLE_WORKS_API_BASE = '/api/creation/square-hole/works';
const SQUARE_HOLE_GALLERY_API_BASE = '/api/runtime/square-hole/gallery';
const SQUARE_HOLE_WORKS_READ_RETRY: ApiRetryOptions = {
maxRetries: 1,
baseDelayMs: 120,
maxDelayMs: 360,
};
const SQUARE_HOLE_WORKS_WRITE_RETRY: ApiRetryOptions = {
maxRetries: 1,
baseDelayMs: 120,
maxDelayMs: 360,
retryUnsafeMethods: true,
};
/**
* 读取当前用户的方洞挑战作品列表。
*/
export function listSquareHoleWorks() {
return requestJson<SquareHoleWorksResponse>(
SQUARE_HOLE_WORKS_API_BASE,
{ method: 'GET' },
'读取方洞挑战作品列表失败',
{ retry: SQUARE_HOLE_WORKS_READ_RETRY },
);
}
/**
* 读取公开方洞挑战作品列表。
*/
export function listSquareHoleGallery() {
return requestJson<SquareHoleWorksResponse>(
SQUARE_HOLE_GALLERY_API_BASE,
{ method: 'GET' },
'读取方洞挑战广场失败',
{
retry: SQUARE_HOLE_WORKS_READ_RETRY,
skipAuth: true,
skipRefresh: true,
},
);
}
/**
* 读取方洞挑战作品详情。
*/
export function getSquareHoleWorkDetail(profileId: string) {
return requestJson<SquareHoleWorkDetailResponse>(
`${SQUARE_HOLE_WORKS_API_BASE}/${encodeURIComponent(profileId)}`,
{ method: 'GET' },
'读取方洞挑战作品详情失败',
{ retry: SQUARE_HOLE_WORKS_READ_RETRY },
);
}
/**
* 保存结果页可编辑字段。
*/
export function updateSquareHoleWork(
profileId: string,
payload: PutSquareHoleWorkRequest,
) {
return requestJson<SquareHoleWorkMutationResponse>(
`${SQUARE_HOLE_WORKS_API_BASE}/${encodeURIComponent(profileId)}`,
{
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
},
'更新方洞挑战作品失败',
{ retry: SQUARE_HOLE_WORKS_WRITE_RETRY },
);
}
/**
* 发布方洞挑战作品。发布门槛由后端最终确认。
*/
export function publishSquareHoleWork(profileId: string) {
return requestJson<SquareHoleWorkMutationResponse>(
`${SQUARE_HOLE_WORKS_API_BASE}/${encodeURIComponent(profileId)}/publish`,
{ method: 'POST' },
'发布方洞挑战作品失败',
{ retry: SQUARE_HOLE_WORKS_WRITE_RETRY },
);
}
/**
* 删除当前用户的方洞挑战作品,并返回删除后的列表。
*/
export function deleteSquareHoleWork(profileId: string) {
return requestJson<SquareHoleWorksResponse>(
`${SQUARE_HOLE_WORKS_API_BASE}/${encodeURIComponent(profileId)}`,
{ method: 'DELETE' },
'删除方洞挑战作品失败',
{ retry: SQUARE_HOLE_WORKS_WRITE_RETRY },
);
}
export const squareHoleWorksClient = {
delete: deleteSquareHoleWork,
getDetail: getSquareHoleWorkDetail,
listGallery: listSquareHoleGallery,
list: listSquareHoleWorks,
publish: publishSquareHoleWork,
update: updateSquareHoleWork,
};