114 lines
3.1 KiB
TypeScript
114 lines
3.1 KiB
TypeScript
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,
|
|
};
|