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