diff --git a/src/constants/common.js b/src/constants/common.js index 37791b56..5c8045c1 100644 --- a/src/constants/common.js +++ b/src/constants/common.js @@ -30,6 +30,8 @@ module.exports = { '/user/v1/account/validateUserSession', '/user/v1/account/validatingEmailIds', '/user/v1/tenant/list', + '/user/v1/tenant/read/', + '/user/v1/tenant/domain/', '/user/v1/tenant/readInternal/', '/v1/cloud-services/file/getDownloadableUrl', ], diff --git a/src/controllers/v1/admin.js b/src/controllers/v1/admin.js index b18b4c3f..ba3a4766 100644 --- a/src/controllers/v1/admin.js +++ b/src/controllers/v1/admin.js @@ -188,7 +188,7 @@ module.exports = class Admin { }) } - const result = await adminService.deactivateUser(req.body, req.decodedToken.id) + const result = await adminService.deactivateUser(req.body, req.decodedToken.id, req.decodedToken.tenant_code, req.decodedToken.organization_code) return result } catch (error) { diff --git a/src/controllers/v1/organization.js b/src/controllers/v1/organization.js index e56eb6ea..efdbe942 100644 --- a/src/controllers/v1/organization.js +++ b/src/controllers/v1/organization.js @@ -188,7 +188,8 @@ module.exports = class Organization { try { const result = await orgService.addRelatedOrg( req.params.id ? req.params.id : '', - req.body.related_orgs ? req.body.related_orgs : [] + req.body.related_orgs ? req.body.related_orgs : [], + req?.decodedToken?.tenant_code ) return result } catch (error) { @@ -199,7 +200,8 @@ module.exports = class Organization { try { const result = await orgService.removeRelatedOrg( req.params.id ? req.params.id : '', - req.body.related_orgs ? req.body.related_orgs : [] + req.body.related_orgs ? req.body.related_orgs : [], + req?.decodedToken?.tenant_code ) return result } catch (error) { diff --git a/src/helpers/userInvite.js b/src/helpers/userInvite.js index 216d7661..685e1458 100644 --- a/src/helpers/userInvite.js +++ b/src/helpers/userInvite.js @@ -33,6 +33,7 @@ const notificationUtils = require('@utils/notification') const tenantDomainQueries = require('@database/queries/tenantDomain') const tenantQueries = require('@database/queries/tenants') const userSessionsService = require('@services/user-sessions') +const { organization } = require('@constants/blacklistConfig') let defaultOrg = {} let modelName = '' let externalEntityNameIdMap = {} @@ -960,6 +961,7 @@ module.exports = class UserInviteHelper { user_id: existingUser.id, organization_id: user.organization_id, roles: currentRoles, + organization_code: user.organization_code, }, }) } @@ -970,6 +972,8 @@ module.exports = class UserInviteHelper { user_id: existingUser.id, new_roles: newRoles, current_roles: currentRoles, + tenant_code: user.tenant_code, + organization_code: user.organization_code } if (isOrgUpdate) requestBody.organization_id = user.organization_id eventBroadcaster('roleChange', { diff --git a/src/services/admin.js b/src/services/admin.js index 1bb0b0ea..f25e7717 100644 --- a/src/services/admin.js +++ b/src/services/admin.js @@ -607,6 +607,7 @@ module.exports = class AdminHelper { user_id: user.id, organization_id: organizationId, roles: roleData.map((r) => r.title), + organization_code: organization.code, }, }) ) @@ -714,7 +715,7 @@ module.exports = class AdminHelper { // Broadcast to end upcoming sessions eventBroadcaster('deactivateUpcomingSession', { - requestBody: { user_ids: userIds }, + requestBody: { user_ids: userIds , tenant_code: tenantCode, organization_code: organizationCode}, }) } @@ -740,7 +741,7 @@ module.exports = class AdminHelper { * @param {Object} loggedInUserId - logged in user id * @returns {JSON} - Deactivated user data */ - static async deactivateUser(bodyData, loggedInUserId) { + static async deactivateUser(bodyData, loggedInUserId, tenantCode, orgCode) { try { let filterQuery = {} for (let item in bodyData) { @@ -783,6 +784,8 @@ module.exports = class AdminHelper { eventBroadcaster('deactivateUpcomingSession', { requestBody: { user_ids: userIds, + tenant_code: tenantCode, + organization_code: orgCode }, }) diff --git a/src/services/org-admin.js b/src/services/org-admin.js index 24f862f7..ce32efcb 100644 --- a/src/services/org-admin.js +++ b/src/services/org-admin.js @@ -495,6 +495,8 @@ module.exports = class OrgAdminHelper { eventBroadcaster('deactivateUpcomingSession', { requestBody: { user_ids: allUserIds, + tenant_code: tokenInformation.tenant_code, + organization_code: tokenInformation.organization_code }, }) diff --git a/src/services/organization.js b/src/services/organization.js index ddc68b89..d9a4993a 100644 --- a/src/services/organization.js +++ b/src/services/organization.js @@ -512,7 +512,7 @@ module.exports = class OrganizationsHelper { } } - static async addRelatedOrg(id, relatedOrgs = []) { + static async addRelatedOrg(id, relatedOrgs = [], tenantCode) { try { // fetch organization details before update const orgDetailsBeforeUpdate = await organizationQueries.findOne({ id }) @@ -553,6 +553,7 @@ module.exports = class OrganizationsHelper { delta_organization_ids: deltaOrgs, organization_id: id, action: 'PUSH', + tenant_code: tenantCode }, }) } @@ -565,7 +566,7 @@ module.exports = class OrganizationsHelper { throw error } } - static async removeRelatedOrg(id, relatedOrgs = []) { + static async removeRelatedOrg(id, relatedOrgs = [], tenantCode) { try { // fetch organization details before update const orgDetailsBeforeUpdate = await organizationQueries.findOne({ id }) @@ -625,6 +626,7 @@ module.exports = class OrganizationsHelper { delta_organization_ids: relatedOrgs, organization_id: id, action: 'POP', + tenant_code:tenantCode }, }) } diff --git a/src/services/tenant.js b/src/services/tenant.js index 6562394a..b4c06453 100644 --- a/src/services/tenant.js +++ b/src/services/tenant.js @@ -784,4 +784,55 @@ module.exports = class tenantHelper { throw error // Re-throw other errors } } + + /** + * Get primary domain for tenant + * @method + * @name getDomain + * @param {string} tenantCode - code of the tenant + * @returns {JSON} - tenant domain information + */ + static async getDomain(tenantCode) { + try { + // Validate tenant exists + const tenantDetails = await tenantQueries.findOne({ + code: tenantCode, + }) + + if (!tenantDetails) { + return responses.failureResponse({ + statusCode: httpStatusCode.not_found, + message: 'TENANT_NOT_FOUND', + responseCode: 'CLIENT_ERROR', + }) + } + + // Get the first domain (primary domain) for the tenant + const domain = await tenantDomainQueries.findOne({ + tenant_code: tenantCode, + verified: true, + }) + + if (!domain) { + return responses.failureResponse({ + statusCode: httpStatusCode.not_found, + message: 'TENANT_DOMAIN_NOT_FOUND', + responseCode: 'CLIENT_ERROR', + }) + } + + return responses.successResponse({ + statusCode: httpStatusCode.ok, + message: 'TENANT_DOMAIN_FETCHED', + result: { + domain: domain.domain, + tenant_code: tenantCode, + verified: domain.verified, + }, + }) + } catch (error) { + console.log(error) + throw error + } + } } diff --git a/src/services/userInvite.js b/src/services/userInvite.js index b79f212c..f51da39f 100644 --- a/src/services/userInvite.js +++ b/src/services/userInvite.js @@ -370,6 +370,7 @@ module.exports = class UserInviteHelper { user_id: existingUser.id, organization_id: user.organization_id, roles: currentRoles, + organization_code: user.organization_code }, }) } @@ -380,6 +381,8 @@ module.exports = class UserInviteHelper { user_id: existingUser.id, new_roles: newRoles, current_roles: currentRoles, + tenant_code: user.tenant_code, + organization_code: user.organization_code } if (isOrgUpdate) requestBody.organization_id = user.organization_id eventBroadcaster('roleChange', {