/*
* セカンダリユーザーの user_metadata と app_metadata をプライマリユーザーに再帰的にマージします。
* プライマリユーザーのデータが優先されます。
* 配列フィールドは結合されます。
*/
async function mergeMetadata(primaryUserId, secondaryUserId) {
// 両方のユーザーをメタデータとともに読み込みます。
const [primaryUser, secondaryUser] = await Promise.all(
[primaryUserId, secondaryUserId].map((uid) => auth0Client.getUser(uid))
);
const customizerCallback = function (objectValue, sourceValue) {
if (_.isArray(objectValue)) {
return sourceValue.concat(objectValue);
}
};
const mergedUserMetadata = _.merge(
{},
secondaryUser.user_metadata,
primaryUser.user_metadata,
customizerCallback
);
const mergedAppMetadata = _.merge(
{},
secondaryUser.app_metadata,
primaryUser.app_metadata,
customizerCallback
);
await auth0Client.updateUser(primaryUserId, {
user_metadata: mergedUserMetadata,
app_metadata: mergedAppMetadata,
});
}