feat: migrate app routes and business modules
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
import { hasRemoteConfig } from '@/utils/runtime-config.js'
|
||||
import { normalizeGenealogyPathId } from './genealogy-contract.js'
|
||||
import {
|
||||
normalizeGenealogyMemberOptions,
|
||||
normalizeGenealogyMembers,
|
||||
normalizeMemberUpdatePayload
|
||||
} from './genealogy-member-contract.js'
|
||||
import { normalizeResourcePathId } from './request-normalizers.js'
|
||||
import { createRequestError, requestStrict } from './request-client.js'
|
||||
|
||||
const requireRemoteMembership = (label, operation) => {
|
||||
if (hasRemoteConfig()) return
|
||||
throw createRequestError(
|
||||
`${label}${operation}需要真实服务,当前本地预览不会伪造结果`,
|
||||
operation === '读取' ? 'REMOTE_READ_REQUIRED' : 'REMOTE_WRITE_REQUIRED'
|
||||
)
|
||||
}
|
||||
|
||||
const writeMembership = (url, method, data, label, requestOptions) => {
|
||||
requireRemoteMembership(label, '写入')
|
||||
return requestStrict({
|
||||
url,
|
||||
method,
|
||||
...(data === undefined ? {} : { data })
|
||||
}, {
|
||||
requestController: requestOptions.requestController ?? null
|
||||
})
|
||||
}
|
||||
|
||||
const deleteMembership = async (url, label, requestOptions) => {
|
||||
requireRemoteMembership(label, '写入')
|
||||
await requestStrict({ url, method: 'DELETE' }, {
|
||||
requireData: false,
|
||||
requestController: requestOptions.requestController ?? null
|
||||
})
|
||||
return null
|
||||
}
|
||||
|
||||
export const genealogyMemberApi = {
|
||||
async getMembers(genealogyId, requestOptions = {}) {
|
||||
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
|
||||
requireRemoteMembership('家谱成员', '读取')
|
||||
const members = await requestStrict({
|
||||
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/members`,
|
||||
method: 'GET'
|
||||
}, {
|
||||
requestController: requestOptions.requestController ?? null
|
||||
})
|
||||
return normalizeGenealogyMembers(members, normalizedGenealogyId)
|
||||
},
|
||||
|
||||
async getMemberOptions(genealogyId, requestOptions = {}) {
|
||||
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
|
||||
requireRemoteMembership('成员选项', '读取')
|
||||
const memberOptions = await requestStrict({
|
||||
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/members/options`,
|
||||
method: 'GET'
|
||||
}, {
|
||||
requestController: requestOptions.requestController ?? null
|
||||
})
|
||||
return normalizeGenealogyMemberOptions(memberOptions)
|
||||
},
|
||||
|
||||
async updateMember(genealogyId, memberId, payload, requestOptions = {}) {
|
||||
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
|
||||
const normalizedMemberId = normalizeResourcePathId(memberId, '成员标识')
|
||||
const member = await writeMembership(
|
||||
`/genealogy/app/genealogies/${normalizedGenealogyId}/members/${normalizedMemberId}`,
|
||||
'PUT',
|
||||
normalizeMemberUpdatePayload(payload),
|
||||
'家谱成员',
|
||||
requestOptions
|
||||
)
|
||||
return normalizeGenealogyMembers([member], normalizedGenealogyId)[0]
|
||||
},
|
||||
|
||||
async unlinkMemberLineagePerson(genealogyId, memberId, requestOptions = {}) {
|
||||
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
|
||||
const normalizedMemberId = normalizeResourcePathId(memberId, '成员标识')
|
||||
return deleteMembership(
|
||||
`/genealogy/app/genealogies/${normalizedGenealogyId}/members/${normalizedMemberId}/lineage-person`,
|
||||
'成员世系绑定',
|
||||
requestOptions
|
||||
)
|
||||
},
|
||||
|
||||
async removeMember(genealogyId, memberId, requestOptions = {}) {
|
||||
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
|
||||
const normalizedMemberId = normalizeResourcePathId(memberId, '成员标识')
|
||||
return deleteMembership(
|
||||
`/genealogy/app/genealogies/${normalizedGenealogyId}/members/${normalizedMemberId}`,
|
||||
'家谱成员',
|
||||
requestOptions
|
||||
)
|
||||
},
|
||||
|
||||
async leaveGenealogy(genealogyId, requestOptions = {}) {
|
||||
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
|
||||
return deleteMembership(
|
||||
`/genealogy/app/genealogies/${normalizedGenealogyId}/members/me`,
|
||||
'退出家谱',
|
||||
requestOptions
|
||||
)
|
||||
},
|
||||
|
||||
async transferGenealogyOwner(genealogyId, targetMemberId, requestOptions = {}) {
|
||||
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
|
||||
return writeMembership(
|
||||
`/genealogy/app/genealogies/${normalizedGenealogyId}/members/owner-transfer`,
|
||||
'PUT',
|
||||
{ targetMemberId: normalizeResourcePathId(targetMemberId, '目标成员标识') },
|
||||
'家谱所有者转让',
|
||||
requestOptions
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user