mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-08-18 05:35:50 +02:00
133 lines
4.6 KiB
JavaScript
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);
|
|
}
|
|
}
|