Files
jiapuapp/services/api/genealogy-member-service.js

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
}
}