diff --git a/packages/frontend-core/src/api/user.js b/packages/frontend-core/src/api/user.js index 39d9359e91..5c4f070802 100644 --- a/packages/frontend-core/src/api/user.js +++ b/packages/frontend-core/src/api/user.js @@ -158,7 +158,7 @@ export const buildUserEndpoints = API => ({ userInfo: { admin: user.admin ? { global: true } : undefined, builder: user.admin || user.builder ? { global: true } : undefined, - groups: user.groups, + userGroups: user.groups, }, })), }) diff --git a/packages/worker/src/sdk/users/users.ts b/packages/worker/src/sdk/users/users.ts index 775514ea5e..8afd398d91 100644 --- a/packages/worker/src/sdk/users/users.ts +++ b/packages/worker/src/sdk/users/users.ts @@ -184,7 +184,9 @@ export const save = async ( ): Promise => { const tenantId = tenancy.getTenantId() const db = tenancy.getGlobalDB() - let { email, _id } = user + + let { email, _id, userGroups = [] } = user + if (!email && !_id) { throw new Error("_id or email is required") } @@ -220,8 +222,16 @@ export const save = async ( let builtUser = await buildUser(user, opts, tenantId, dbUser) // make sure we set the _id field for a new user + // Also if this is a new user, associate groups with them + let groupPromises = [] if (!_id) { _id = builtUser._id! + + if (userGroups.length > 0) { + for (let groupId of userGroups) { + groupPromises.push(groupsSdk.addUsers(groupId, [_id])) + } + } } try { @@ -235,6 +245,8 @@ export const save = async ( // let server know to sync user await apps.syncUserInApps(_id) + await Promise.all(groupPromises) + return { _id: response.id, _rev: response.rev, @@ -557,12 +569,13 @@ export const invite = async ( successful: [], unsuccessful: [], } - + console.log(users) const matchedEmails = await searchExistingEmails(users.map(u => u.email)) const newUsers = [] // separate duplicates from new users for (let user of users) { + console.log(user) if (matchedEmails.includes(user.email)) { response.unsuccessful.push({ email: user.email, reason: "Unavailable" }) } else {