Files
OpenSign/apps/OpenSignServer/cloud/parsefunction/UpdateExistUserAsAdmin.js
T

133 lines
4.6 KiB
JavaScript

async function updateUserExceptAdmin(data) {
const Contracts = Parse.Object.extend('contracts_Users');
let skip = 0;
const limit = 100;
let hasMore = true;
while (hasMore) {
const query = new Parse.Query(Contracts);
query.notEqualTo('Email', data.email);
query.limit(limit);
query.skip(skip);
try {
// Fetch a batch of entries
const results = await query.find({ useMasterKey: true });
// Check if there are more entries to process
hasMore = results.length === limit;
skip += results.length;
// Iterate through each entry and update the userRole field
for (let i = 0; i < results.length; i++) {
const contract = results[i];
contract.set('UserRole', 'contracts_User');
contract.set('OrganizationId', data.orgPtr);
contract.set('TeamIds', data.teamIds);
contract.set('CreatedBy', data.createdBy);
contract.set('TenantId', data.tenantId);
}
// Save all the updated entries
await Parse.Object.saveAll(results, { useMasterKey: true });
console.log(`${results.length} user roles updated successfully`);
} catch (error) {
console.error('Error while updating user roles:', error);
hasMore = false; // Stop if there's an error
}
}
}
// `UpdateExistUserAsAdmin` is used to create admin from exist user records and transfer to org of admin
export default async function UpdateExistUserAsAdmin(request) {
const email = request.params.email;
const masterkey = request.params.masterkey;
try {
if (masterkey !== process.env.MASTER_KEY) {
throw new Parse.Error(404, 'Invalid master key.');
}
const extClsQuery = new Parse.Query('contracts_Users');
extClsQuery.equalTo('UserRole', 'contracts_Admin');
extClsQuery.notEqualTo('IsDisabled', true);
const extAdminRes = await extClsQuery.find({ useMasterKey: true });
if (extAdminRes && extAdminRes.length === 1 && extAdminRes?.[0]?.get('OrganizationId')) {
throw new Parse.Error(Parse.Error.DUPLICATE_VALUE, 'Admin already exist.');
} else {
const extCls = new Parse.Query('contracts_Users');
extCls.equalTo('Email', email);
extCls.notEqualTo('IsDisabled', true);
const extRes = await extCls.first({ useMasterKey: true });
console.log('extRes ', extRes);
if (extRes) {
const _extRes = JSON.parse(JSON.stringify(extRes));
const tenantId = {
__type: 'Pointer',
className: 'partners_Tenant',
objectId: _extRes.TenantId.objectId,
};
const createdBy = {
__type: 'Pointer',
className: '_User',
objectId: _extRes.UserId.objectId,
};
const org = new Parse.Object('contracts_Organizations');
org.set('Name', _extRes.Company);
org.set('IsActive', true);
org.set('TenantId', tenantId);
org.set('ExtUserId', {
__type: 'Pointer',
className: 'contracts_Users',
objectId: extRes.id,
});
org.set('CreatedBy', createdBy);
const orgRes = await org.save(null, { useMasterKey: true });
const teamCls = new Parse.Object('contracts_Teams');
teamCls.set('Name', 'All Users');
teamCls.set('OrganizationId', {
__type: 'Pointer',
className: 'contracts_Organizations',
objectId: orgRes.id,
});
teamCls.set('IsActive', true);
const teamRes = await teamCls.save(null, { useMasterKey: true });
const orgPtr = {
__type: 'Pointer',
className: 'contracts_Organizations',
objectId: orgRes.id,
};
const teamIds = [
{
__type: 'Pointer',
className: 'contracts_Teams',
objectId: teamRes.id,
},
];
const extUser = new Parse.Object('contracts_Users');
extUser.id = extRes.id;
extUser.set('UserRole', 'contracts_Admin');
extUser.set('OrganizationId', orgPtr);
extUser.set('TeamIds', teamIds);
const extUserRes = await extUser.save(null, { useMasterKey: true });
if (extUserRes) {
const data = {
orgPtr: orgPtr,
teamIds: teamIds,
email: email,
createdBy: createdBy,
tenantId: tenantId,
};
updateUserExceptAdmin(data);
return 'admin_created';
}
} else {
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'User not found.');
}
}
} catch (err) {
console.log('err in updateExistUserAsAdmin', err);
const code = err.code || 400;
const msg = err.message || 'something went wrong.';
throw new Parse.Error(code, msg);
}
}