Preserve partial creation replies on stream failure
Some checks failed
CI / verify (push) Has been cancelled
Some checks failed
CI / verify (push) Has been cancelled
This commit is contained in:
113
src/services/square-hole-works/squareHoleWorksClient.ts
Normal file
113
src/services/square-hole-works/squareHoleWorksClient.ts
Normal 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,
|
||||
};
|
||||
Reference in New Issue
Block a user