// @ts-check
/**
* @import {treeAction} from './../../types.js'
*/
import { query, HEX2uuid } from '@commtool/sql-query'
import rebuildFees from '../rebuildFees.js'
import { familyAddress } from '../familyAddress.js'
import { errorLoggerUpdate } from '../../utils/requestLogger.js'
/**
* Handles the `family` and `familyB` add actions.
*
* Fired when a family member is added to a family and the organisation uses
* family-based fees. Recalculates membership fees and updates family indices
* for the target family.
*
* @param {treeAction} action
* @returns {Promise<void>}
*/
export const addFamilyAction = async (action) => {
try {
// The link has already been created when the member was created.
rebuildFees(action.UIDnewTarget, HEX2uuid(action.UIDroot))
} catch (e) {
errorLoggerUpdate(e || new Error('treeAdd.familyActions.addFamilyAction: Unknown error occurred'))
}
}
/**
* Handles the `familySync` add action.
*
* Syncs addresses, phone numbers, email addresses, and accounts between
* family members when a family-shared contact detail is created or modified.
*
* @param {treeAction} action
* @returns {Promise<void>}
*/
export const addFamilySyncAction = async (action) => {
try {
const persons = await query(
`SELECT Member.UID, Member.Data, Links.UIDTarget AS MemberA,
ObjectBase.Data AS BaseData, ObjectBase.dindex, ObjectBase.Type,
ObjectBase.SortName AS SortBase,
ObjectBase.ValidFrom, ObjectBase.ValidUntil, ObjectBase.dindex
FROM ObjectBase
INNER JOIN Member ON (Member.UID=ObjectBase.UIDBelongsTo)
INNER JOIN Links ON (Links.Type='memberA' AND Links.UID=ObjectBase.UID)
INNER JOIN ObjectBase AS MainGroup ON (Links.UIDTarget=MainGroup.UID AND MainGroup.Type='group')
WHERE ObjectBase.UID=? AND ObjectBase.Type IN ('person','extern')`,
[action.UIDBelongsTo],
{ log: false, cast: ['json'] },
)
if (persons.length > 0)
familyAddress(/** @type {import('../familyAddress.js').FamilyMemberObject} */ (persons[0]), HEX2uuid(action.UIDroot))
} catch (e) {
errorLoggerUpdate(e || new Error('treeAdd.familyActions.addFamilySyncAction: Unknown error occurred'))
}
}