mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
@@ -65,4 +65,34 @@ async function reconcileDefaultGroup(user_ids, { createdBy = null } = {}) {
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = { NOGRP_CODE, getDefaultGroupId, enrollDefaultGroup, dropDefaultGroupMembership, reconcileDefaultGroup };
|
||||
/**
|
||||
* Invite-link login: if user_id is currently sitting in NOGRP, move them into
|
||||
* the group identified by group_code. Never reassigns someone already parked
|
||||
* in a real (non-NOGRP) group — an invite link used post-login only fills in
|
||||
* an ungrouped user's group, it doesn't override an existing one. No-op if
|
||||
* group_code doesn't resolve to an active group.
|
||||
*/
|
||||
async function switchFromNogrpByCode(user_id, group_code, { updatedBy = null } = {}) {
|
||||
if (!group_code) return null;
|
||||
|
||||
const group = await mdl_UserGroups.findOne({
|
||||
where: { group_code: group_code.toUpperCase().trim(), is_active: true },
|
||||
});
|
||||
if (!group) return null;
|
||||
|
||||
const membership = await mdl_UserGroupMembers.findOne({
|
||||
where: { user_id },
|
||||
include: [{ model: mdl_UserGroups, attributes: ['group_code'] }],
|
||||
});
|
||||
if (membership) {
|
||||
if (membership.UserGroup?.group_code !== NOGRP_CODE) return null; // already in a real group — leave it alone
|
||||
if (Number(membership.group_id) === Number(group.group_id)) return group; // already in this exact group
|
||||
}
|
||||
|
||||
await mdl_UserGroupMembers.create({ group_id: group.group_id, user_id, createdBy: updatedBy });
|
||||
await dropDefaultGroupMembership([user_id], group.group_id, { updatedBy });
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
module.exports = { NOGRP_CODE, getDefaultGroupId, enrollDefaultGroup, dropDefaultGroupMembership, reconcileDefaultGroup, switchFromNogrpByCode };
|
||||
|
||||
Reference in New Issue
Block a user