102 lines
3.7 KiB
JavaScript
102 lines
3.7 KiB
JavaScript
import { normalizeGenealogyPathId } from './genealogy-contract.js'
|
|
import {
|
|
normalizeGenealogyMemberOptions,
|
|
normalizeGenealogyMembers,
|
|
normalizeMemberUpdatePayload
|
|
} from './genealogy-member-contract.js'
|
|
import { normalizeResourcePathId } from './request-normalizers.js'
|
|
import { requestStrict } from './request-client.js'
|
|
|
|
const writeMembership = (url, method, data, requestOptions) => {
|
|
return requestStrict({
|
|
url,
|
|
method,
|
|
...(data === undefined ? {} : { data })
|
|
}, {
|
|
requestController: requestOptions.requestController ?? null
|
|
})
|
|
}
|
|
|
|
const deleteMembership = async (url, requestOptions) => {
|
|
await requestStrict({ url, method: 'DELETE' }, {
|
|
requireData: false,
|
|
requestController: requestOptions.requestController ?? null
|
|
})
|
|
return null
|
|
}
|
|
|
|
export const genealogyMemberApi = {
|
|
async getMembers(genealogyId, requestOptions = {}) {
|
|
const normalizedGenealogyId = normalizeGenealogyPathId(genealogyId)
|
|
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)
|
|
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)
|
|
await requestStrict({
|
|
url: `/genealogy/app/genealogies/${normalizedGenealogyId}/members/owner-transfer`,
|
|
method: 'PUT',
|
|
data: { targetMemberId: normalizeResourcePathId(targetMemberId, '目标成员标识') }
|
|
}, {
|
|
requireData: false,
|
|
requestController: requestOptions.requestController ?? null
|
|
})
|
|
return null
|
|
}
|
|
}
|