Files
freeCodeCamp/api-server/src/server/utils/publicUserProps.js
Naomi Carrigan 2d513aee33 feat: make new javascript live (#52623)
Co-authored-by: scissorsneedfoodtoo <scissorsneedfoodtoo@gmail.com>
2023-12-20 00:39:33 -06:00

80 lines
1.7 KiB
JavaScript

import { isURL } from 'validator';
export const publicUserProps = [
'about',
'calendar',
'completedChallenges',
'completedExams',
'completedSurveys',
'githubProfile',
'isApisMicroservicesCert',
'isBackEndCert',
'isCheater',
'isDonating',
'is2018DataVisCert',
'isDataVisCert',
'isFrontEndCert',
'isFullStackCert',
'isFrontEndLibsCert',
'isHonest',
'isInfosecQaCert',
'isQaCertV7',
'isInfosecCertV7',
'isJsAlgoDataStructCert',
'isRelationalDatabaseCertV8',
'isRespWebDesignCert',
'isSciCompPyCertV7',
'isDataAnalysisPyCertV7',
'isMachineLearningPyCertV7',
'isCollegeAlgebraPyCertV8',
'isFoundationalCSharpCertV8',
'isJsAlgoDataStructCertV8',
'linkedin',
'location',
'name',
'partiallyCompletedChallenges',
'points',
'portfolio',
'profileUI',
'projects',
'savedChallenges',
'twitter',
'username',
'website',
'yearsTopContributor'
];
export const userPropsForSession = [
...publicUserProps,
'currentChallengeId',
'email',
'emailVerified',
'id',
'sendQuincyEmail',
'theme',
'keyboardShortcuts',
'completedChallengeCount',
'acceptedPrivacyTerms'
];
export function normaliseUserFields(user) {
const about = user.bio && !user.about ? user.bio : user.about;
const picture = user.picture || '';
const twitter =
user.twitter && isURL(user.twitter)
? user.twitter
: user.twitter &&
`https://www.twitter.com/${user.twitter.replace(/^@/, '')}`;
return { about, picture, twitter };
}
export function getProgress(progressTimestamps) {
const calendar = progressTimestamps
.filter(Boolean)
.reduce((data, timestamp) => {
data[Math.floor(timestamp / 1000)] = 1;
return data;
}, {});
return { calendar };
}