Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion controllers/FastLoad/retrieveTables.js
Original file line number Diff line number Diff line change
Expand Up @@ -242,8 +242,27 @@ exports.makeATempTableAndReturnJSON = async (tableName, anonymizeSensitiveData)
return getTempTableAsJSON(tempTableName);
};

// See https://wevoteusa.atlassian.net/browse/WV-2669
exports.convertTeamDepartmentsToPostgresAcceptableFormat = async () => {
console.log('App is converting old format Team department strings');

const from = ['{Engineering}', '{Analytics}', '{"Donations"}'];
const to = ['{"Engineering Team"}', '{"Analytics Team"}', '{"Donations Team"}'];
for (let i = 0; i < from.length; i++) {
const fromString = from[i];
const toString = to[i];
try {
const query = `UPDATE public."Team" SET departments = '${toString}' WHERE departments = '${fromString}'`;
const resp = await prisma.$executeRawUnsafe(query);
console.log(`updatedDept (${fromString}): ${JSON.stringify(resp)}`);
} catch (error) {
console.log(`ERROR updatedDept: ${JSON.stringify(error)}`);
}
}
};

exports.getOneFastLoadTable = async (req, res) => {
if (process.env.SERVER_IS_SOURCE_OF_TRUTH == true) {
if (process.env.SERVER_IS_SOURCE_OF_TRUTH === true) {
console.log('getOneFastLoadTable: weconnect-server environment variable SERVER_IS_SOURCE_OF_TRUTH is true, returning null');
return null;
}
Expand Down
15 changes: 7 additions & 8 deletions controllers/taskApiController.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const { extractVariablesToChangeFromIncomingParams } = require('./dataTransforma
const { convertToInteger } = require('../utils/convertToInteger');
const { savePerson } = require('../models/personModel');


/**
* GET /api/v1/task-definition-list-retrieve
* Retrieve a list of TaskDefinitions for one TaskGroup.
Expand Down Expand Up @@ -121,16 +122,15 @@ exports.taskGroupListRetrieve = async (request, response) => {
};

/**
* GET /api/v1/task-status-list-retrieve
* POST /api/v1/task-status-list-retrieve
* Retrieve a list of tasks and the supporting data.
*/
exports.taskStatusListRetrieve = async (request, response) => {
const parsedUrl = new URL(request.url, `${process.env.BASE_URL}`);
const queryParams = new URLSearchParams(parsedUrl.search);
// console.log('queryParams:', queryParams);
const personIdListIncoming = queryParams.getAll('personIdList[]');
const personIdListIncoming = request.body.personIdList || [];
// console.log('~~~~~~ taskStatusListRetrieve request.body', request.body);
// console.log('~~~~~~ taskStatusListRetrieve personIdListIncoming', JSON.stringify(request.body.personIdList) || '');

const personIdList = personIdListIncoming.map(convertToInteger);
// console.log('taskStatusListRetrieve personIdList:', personIdList);

const jsonData = {
isSearching: false,
Expand All @@ -143,7 +143,6 @@ exports.taskStatusListRetrieve = async (request, response) => {
try {
// console.log('taskStatusListRetrieve personIdList:', personIdList);
const results = await retrieveTaskStatusListByPersonIdList(personIdList);
// const results = {};
// console.log('results:', results);
jsonData.success = true;
jsonData.taskList = results.taskList;
Expand All @@ -153,7 +152,7 @@ exports.taskStatusListRetrieve = async (request, response) => {
} catch (err) {
console.log('taskStatusListRetrieve err:', err);
jsonData.status += err.message;
jsonData.success = false;
jsonData.success += `personIdListIncoming.length=${personIdListIncoming.length}`;
}
response.json(jsonData);
};
Expand Down
24 changes: 14 additions & 10 deletions controllers/teamApiController.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,20 @@ const { TEAM_MEMBER_FIELDS_ACCEPTED } = require('../models/teamModel');
exports.addPersonToTeam = async (request, response) => {
let shouldAddPersonToTeam = false;

// const results = await getAllAccessRightsForPerson(request);
// const { accessRights, personIdsByTeam, teamAccessRights } = results;

const parsedUrl = new URL(request.url, `${process.env.BASE_URL}`);
const queryParams = new URLSearchParams(parsedUrl.search);
const personId = convertToInteger(queryParams.get('personId'));
const teamId = convertToInteger(queryParams.get('teamId'));
const teamMemberUpdateDict = extractVariablesToChangeFromIncomingParams(
queryParams,
TEAM_MEMBER_FIELDS_ACCEPTED,
);
const queryString = request.url.split('?')[1];
const queryParams = new URLSearchParams(queryString);
const paramsObject = Object.fromEntries(queryParams.entries());
const personId = convertToInteger(paramsObject.personId);
const teamId = convertToInteger(paramsObject.teamId);
const teamMemberUpdateDict = {};
Object.keys(paramsObject).forEach((key) => {
const value = paramsObject[key];
if (key in TEAM_MEMBER_FIELDS_ACCEPTED) {
teamMemberUpdateDict[key] = value;
}
});

// Set up the default JSON response.
const jsonData = {
addPersonToTeamSuccessful: false,
Expand Down Expand Up @@ -62,6 +65,7 @@ exports.addPersonToTeam = async (request, response) => {

if (shouldAddPersonToTeam) {
// Note: This doesn't return a teamMember object
// const ret =
await updateOrCreateTeamMember(personId, teamId, teamMemberUpdateDict);
jsonData.addPersonToTeamSuccessful = true;
jsonData.personId = personId;
Expand Down
24 changes: 13 additions & 11 deletions routes/apiRoutes.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ const meetingApiController = require('../controllers/meetingApiController');
const personApiController = require('../controllers/personApiController');
const googleApiController = require('../controllers/googleApiController');
const questionnaireApiController = require('../controllers/questionnaireApiController');
const taskApiController = require('../controllers/taskApiController');
const { taskGroupTeamLinkDelete, taskDefinitionSave, taskStatusListRetrieve, taskDefinitionListRetrieve,
taskGroupTeamLinkListRetrieve, taskGroupTeamLinkSave, taskGroupListRetrieve, taskGroupSave, taskSave,
} = require('../controllers/taskApiController');
const teamApiController = require('../controllers/teamApiController');
const { slackChannelInvite, slackGetPresence, slackSendMessage, slackListUsers, slackChannelMembers } = require('../controllers/slackApiController');
const { updateDbFromCsv } = require('../controllers/updateSqlFromCsvController');
Expand Down Expand Up @@ -32,15 +34,14 @@ module.exports = function setupWeConnectRoutes (weconnectServer) {
weconnectServer.get('/apis/v1/questionnaire-save', questionnaireApiController.questionnaireSave);
weconnectServer.get('/apis/v1/question-save', questionnaireApiController.questionSave);
weconnectServer.get('/apis/v1/remove-person-from-team', teamApiController.removePersonFromTeam);
weconnectServer.get('/apis/v1/task-definition-list-retrieve', taskApiController.taskDefinitionListRetrieve);
weconnectServer.get('/apis/v1/task-definition-save', taskApiController.taskDefinitionSave);
weconnectServer.get('/apis/v1/task-group-team-link-delete', taskApiController.taskGroupTeamLinkDelete);
weconnectServer.get('/apis/v1/task-group-team-link-list-retrieve', taskApiController.taskGroupTeamLinkListRetrieve);
weconnectServer.get('/apis/v1/task-group-team-link-save', taskApiController.taskGroupTeamLinkSave);
weconnectServer.get('/apis/v1/task-group-list-retrieve', taskApiController.taskGroupListRetrieve);
weconnectServer.get('/apis/v1/task-group-save', taskApiController.taskGroupSave);
weconnectServer.get('/apis/v1/task-save', taskApiController.taskSave);
weconnectServer.get('/apis/v1/task-status-list-retrieve', taskApiController.taskStatusListRetrieve);
weconnectServer.get('/apis/v1/task-definition-list-retrieve', taskDefinitionListRetrieve);
weconnectServer.get('/apis/v1/task-definition-save', taskDefinitionSave);
weconnectServer.get('/apis/v1/task-group-team-link-delete', taskGroupTeamLinkDelete);
weconnectServer.get('/apis/v1/task-group-team-link-list-retrieve', taskGroupTeamLinkListRetrieve);
weconnectServer.get('/apis/v1/task-group-team-link-save', taskGroupTeamLinkSave);
weconnectServer.get('/apis/v1/task-group-list-retrieve', taskGroupListRetrieve);
weconnectServer.get('/apis/v1/task-group-save', taskGroupSave);
weconnectServer.get('/apis/v1/task-save', taskSave);
weconnectServer.get('/apis/v1/team-list-retrieve', teamApiController.teamListRetrieve);
weconnectServer.get('/apis/v1/team-save', teamApiController.teamSave);
weconnectServer.get('/apis/v1/team-delete', teamApiController.teamDelete);
Expand All @@ -53,12 +54,12 @@ module.exports = function setupWeConnectRoutes (weconnectServer) {
weconnectServer.post('/apis/v1/get-auth', personApiController.getAuth);
weconnectServer.post('/apis/v1/google-create-user', googleApiController.googleCreateUserAccount);
weconnectServer.post('/apis/v1/google-delete-user', googleApiController.googleDeleteUserAccount);
weconnectServer.post('/apis/v1/google-drive-list-files', googleApiController.googleDriveListFiles);
weconnectServer.post('/apis/v1/google-get-user-info', googleApiController.googleGetUserInfo);
weconnectServer.post('/apis/v1/google-get-user-list', googleApiController.googleGetUserList);
weconnectServer.post('/apis/v1/google-reset-user-password', googleApiController.googleResetUserPassword);
weconnectServer.post('/apis/v1/google-revoke-sharing', googleApiController.googleDriveRevokeShare);
weconnectServer.post('/apis/v1/google-share-drive-access', googleApiController.googleShareDriveAccess);
weconnectServer.post('/apis/v1/google-drive-list-files', googleApiController.googleDriveListFiles);
weconnectServer.post('/apis/v1/google-transfer-drive-access', googleApiController.googleDriveTransferOwnership);
weconnectServer.post('/apis/v1/jazz-get-applicants', jazzGetApplicants);
weconnectServer.post('/apis/v1/jazz-get-users', jazzGetUsers);
Expand All @@ -72,6 +73,7 @@ module.exports = function setupWeConnectRoutes (weconnectServer) {
weconnectServer.post('/apis/v1/slack-get-presence', slackGetPresence);
weconnectServer.post('/apis/v1/slack-list-users', slackListUsers);
weconnectServer.post('/apis/v1/slack-send-message', slackSendMessage);
weconnectServer.post('/apis/v1/task-status-list-retrieve', taskStatusListRetrieve);
weconnectServer.post('/apis/v1/update-db-from-csv', updateDbFromCsv);
weconnectServer.post('/apis/v1/verify-email-code', personApiController.verifyEmailCode);
};
8 changes: 8 additions & 0 deletions weconnect-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ const rateLimit = require('express-rate-limit');
const cookieParser = require('cookie-parser');
const useragent = require('express-useragent');
const { getPersonIdBySessionId } = require('./models/clientSessionModel');
const { convertTeamDepartmentsToPostgresAcceptableFormat } = require('./controllers/FastLoad/retrieveTables');

process.env.NODE_DEBUG = ''; // Use our custom http logger, that shortens long GET urls

Expand Down Expand Up @@ -297,6 +298,13 @@ serverHttpOrHttps.listen(weconnectServer.get('port'), () => {
console.warn(`WARNING: The BASE_URL environment variable and the App have a port mismatch. If you plan to view the app in your browser using the localhost address, you may need to adjust one of the ports to make them match. BASE_URL: ${BASE_URL}\n`);
}

// This is a data conversion routine that needs to be run a single time in production
// and a single time on each developer instance to convert the data in the Teams table departments column
// When rerun on subsequent startups, it will do nothing and will waste a fraction of a second of startup time.
// See https://wevoteusa.atlassian.net/browse/WV-2669
// TODO: Please delete these comments and the following line in May 2026
convertTeamDepartmentsToPostgresAcceptableFormat();

console.log(`App is running on ${process.env.BASE_URL} in ${weconnectServer.get('env')} mode.`);
console.log('Press CTRL-C to stop.');
});
Expand Down