HH-847 / HH-799: add draft review and idempotent enqueue (#24)

This commit is contained in:
2026-08-31 09:09:47 +08:00
parent 14789e9401
commit 59c30d887c
12 changed files with 989 additions and 53 deletions
+21 -3
View File
@@ -22,14 +22,19 @@ const resourcePaths = {
'browser-images': '/browser-images',
gateways: '/gateways',
accounts: '/phase-a/accounts',
drafts: '/phase-a/drafts',
confirmations: '/phase-a/confirmations',
tasks: '/phase-a/tasks',
'network-exits': '/network-exits',
}
export const dataProvider = {
async getList(resource) {
async getList(resource, params = {}) {
const path = resourcePaths[resource]
if (!path) return unsupported(resource, 'getList')
const records = await request(path)
const filterKeys = { drafts: ['account_id'], confirmations: ['draft_id'], tasks: ['account_id', 'draft_id'] }[resource] || []
const query = new URLSearchParams(filterKeys.flatMap(key => params.filter?.[key] ? [[key, params.filter[key]]] : []))
const records = await request(`${path}${query.size ? `?${query}` : ''}`)
return { data: records.map(record => ({ ...record, id: record.id ?? record.alias ?? record.version ?? record.name })), total: records.length }
},
async create(resource, { data }) {
@@ -54,7 +59,7 @@ export const dataProvider = {
},
async getOne(resource, { id }) {
const path = resourcePaths[resource]
if (!path || (resource !== 'accounts' && resource !== 'network-exits')) return unsupported(resource, 'getOne')
if (!path || !['accounts', 'network-exits', 'drafts', 'confirmations', 'tasks'].includes(resource)) return unsupported(resource, 'getOne')
const record = await request(`${path}/${encodeURIComponent(id)}`)
return { data: { ...record, id: record.id ?? id } }
},
@@ -81,6 +86,19 @@ export const dataProvider = {
if (action !== 'pause' && action !== 'resume') throw new Error(`未知账号操作: ${action}`)
await request(`/phase-a/accounts/${encodeURIComponent(id)}/${action}`, { method: 'POST' })
},
createDraft(accountID, content) {
return request('/phase-a/drafts', jsonOptions('POST', { account_id: accountID, content }))
},
confirmDraft(draftID, accountVersion, draftVersion) {
return request('/phase-a/confirmations', jsonOptions('POST', {
draft_id: draftID,
account_version: accountVersion,
draft_version: draftVersion,
}))
},
enqueueConfirmation(confirmationID) {
return request('/phase-a/tasks', jsonOptions('POST', { confirmation_id: confirmationID }))
},
async networkExitAction(id, action) {
if (action !== 'check' && action !== 'disable') throw new Error(`未知网络出口操作: ${action}`)
return request(`/network-exits/${encodeURIComponent(id)}/${action}`, { method: 'POST' })