feat: release rdbms on staging (#44576)
fix: unhide cert from settings page fix: add cert variables where missing fix: show token on settings page feat: add challenges to certified user data fix: stylize settings page a little bit fix: only show rdbms when upcomingChanges = true fix: relational databases -> relational database
This commit is contained in:
@ -200,6 +200,11 @@
|
||||
"description": "Camper is machine learning with Python certified",
|
||||
"default": false
|
||||
},
|
||||
"isRelationalDatabaseCertV8": {
|
||||
"type": "boolean",
|
||||
"description": "Camper is relational database certified",
|
||||
"default": false
|
||||
},
|
||||
"completedChallenges": {
|
||||
"type": [
|
||||
{
|
||||
|
@ -36,7 +36,7 @@ const {
|
||||
sciCompPyV7Id,
|
||||
dataAnalysisPyV7Id,
|
||||
machineLearningPyV7Id,
|
||||
relationalDatabasesV8Id
|
||||
relationalDatabaseV8Id
|
||||
} = certIds;
|
||||
|
||||
const log = debug('fcc:certification');
|
||||
@ -128,8 +128,8 @@ function createCertTypeIds(allChallenges) {
|
||||
machineLearningPyV7Id,
|
||||
allChallenges
|
||||
),
|
||||
[certTypes.relationalDatabasesV8]: getCertById(
|
||||
relationalDatabasesV8Id,
|
||||
[certTypes.relationalDatabaseV8]: getCertById(
|
||||
relationalDatabaseV8Id,
|
||||
allChallenges
|
||||
)
|
||||
};
|
||||
@ -217,7 +217,8 @@ function getUserIsCertMap(user) {
|
||||
isFullStackCert = false,
|
||||
isSciCompPyCertV7 = false,
|
||||
isDataAnalysisPyCertV7 = false,
|
||||
isMachineLearningPyCertV7 = false
|
||||
isMachineLearningPyCertV7 = false,
|
||||
isRelationalDatabaseCertV8 = false
|
||||
} = user;
|
||||
|
||||
return {
|
||||
@ -235,7 +236,8 @@ function getUserIsCertMap(user) {
|
||||
isFullStackCert,
|
||||
isSciCompPyCertV7,
|
||||
isDataAnalysisPyCertV7,
|
||||
isMachineLearningPyCertV7
|
||||
isMachineLearningPyCertV7,
|
||||
isRelationalDatabaseCertV8
|
||||
};
|
||||
}
|
||||
|
||||
@ -378,6 +380,7 @@ function createShowCert(app) {
|
||||
isSciCompPyCertV7: true,
|
||||
isDataAnalysisPyCertV7: true,
|
||||
isMachineLearningPyCertV7: true,
|
||||
isRelationalDatabaseCertV8: true,
|
||||
isHonest: true,
|
||||
username: true,
|
||||
name: true,
|
||||
|
@ -394,10 +394,8 @@ function createCoderoadChallengeCompleted(app) {
|
||||
if (!userWebhookToken)
|
||||
return res.send(`'coderoad-user-token' not found in request headers`);
|
||||
|
||||
const tutorialRepoPath = tutorialId?.split(':')[0];
|
||||
const tutorialSplit = tutorialRepoPath?.split('/');
|
||||
const tutorialOrg = tutorialSplit?.[0];
|
||||
const tutorialRepoName = tutorialSplit?.[1];
|
||||
const tutorialRepo = tutorialId?.split(':')[0];
|
||||
const tutorialOrg = tutorialRepo?.split('/')?.[0];
|
||||
|
||||
// this allows any GH account to host the repo in development or staging
|
||||
// .org submissions should always be from repos hosted on the fCC GH org
|
||||
@ -408,7 +406,7 @@ function createCoderoadChallengeCompleted(app) {
|
||||
|
||||
// validate tutorial name is in codeRoadChallenges object
|
||||
const challenge = codeRoadChallenges.find(challenge =>
|
||||
challenge.url?.includes(tutorialRepoName)
|
||||
challenge.url?.endsWith(tutorialRepo)
|
||||
);
|
||||
|
||||
if (!challenge) return res.send('Tutorial name is not valid');
|
||||
|
@ -250,6 +250,7 @@ function postResetProgress(req, res, next) {
|
||||
isSciCompPyCertV7: false,
|
||||
isDataAnalysisPyCertV7: false,
|
||||
isMachineLearningPyCertV7: false,
|
||||
isRelationalDatabaseCertV8: false,
|
||||
completedChallenges: []
|
||||
},
|
||||
function (err) {
|
||||
|
@ -14,5 +14,5 @@
|
||||
"dataAnalysisPyV7": "isDataAnalysisPyCertV7",
|
||||
"machineLearningPyV7": "isMachineLearningPyCertV7",
|
||||
"fullStack": "isFullStackCert",
|
||||
"relationalDatabasesV8": "isRelationalDatabasesV8"
|
||||
"relationalDatabaseV8": "isRelationalDatabaseV8"
|
||||
}
|
||||
|
@ -9,7 +9,8 @@ function getCompletedCertCount(user) {
|
||||
'isRespWebDesignCert',
|
||||
'isSciCompPyCertV7',
|
||||
'isDataAnalysisPyCertV7',
|
||||
'isMachineLearningPyCertV7'
|
||||
'isMachineLearningPyCertV7',
|
||||
'isRelationalDatabaseCertV8'
|
||||
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,7 @@ export const publicUserProps = [
|
||||
'isQaCertV7',
|
||||
'isInfosecCertV7',
|
||||
'isJsAlgoDataStructCert',
|
||||
'isRelationalDatabaseCertV8',
|
||||
'isRespWebDesignCert',
|
||||
'isSciCompPyCertV7',
|
||||
'isDataAnalysisPyCertV7',
|
||||
|
@ -131,7 +131,8 @@ function getCompletedCertCount(user) {
|
||||
'isRespWebDesignCert',
|
||||
'isSciCompPyCertV7',
|
||||
'isDataAnalysisPyCertV7',
|
||||
'isMachineLearningPyCertV7'
|
||||
'isMachineLearningPyCertV7',
|
||||
'isRelationalDatabaseCertV8'
|
||||
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
|
||||
}
|
||||
|
||||
|
@ -425,7 +425,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"relational-databases": {
|
||||
"relational-database": {
|
||||
"title": "關係型數據庫",
|
||||
"intro": [
|
||||
"對於這些課程,你將使用真正的開發者工具和軟件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,來完成交互式教程和構建項目。",
|
||||
|
@ -425,7 +425,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"relational-databases": {
|
||||
"relational-database": {
|
||||
"title": "关系型数据库",
|
||||
"intro": [
|
||||
"对于这些课程,你将使用真正的开发者工具和软件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,来完成交互式教程和构建项目。",
|
||||
|
@ -410,12 +410,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"relational-databases": {
|
||||
"title": "Relational Databases",
|
||||
"relational-database": {
|
||||
"title": "Relational Database",
|
||||
"intro": [
|
||||
"For these courses, you will use real developer tools and software including VS Code, PostgreSQL, and the Linux / Unix command line to complete interactive tutorials and build projects.",
|
||||
"These courses start off with basic Bash commands. Using the terminal, you will learn everything from navigating and manipulating a file system, scripting in Bash, all the way to advanced usage.",
|
||||
"Next, you will learn how to create and work with relational databases using PostgreSQL, a database management system, and SQL, the language of these databases.",
|
||||
"Next, you will learn how to create and use a relational database with PostgreSQL, a database management system, and SQL, the language of these databases.",
|
||||
"Finally, you will learn Git, the version control system, an essential tool of every developer."
|
||||
],
|
||||
"blocks": {
|
||||
@ -498,14 +498,14 @@
|
||||
"learn-relational-databases-by-building-a-mario-database": {
|
||||
"title": "Learn Relational Databases by Building a Mario Database",
|
||||
"intro": [
|
||||
"Relational databases organize data into tables that are linked together through relationships.",
|
||||
"In this 165 lesson course, you will learn the basics of relational databases by creating a PostgreSQL database filled with video game characters."
|
||||
"A relational database organizes data into tables that are linked together through relationships.",
|
||||
"In this 165 lesson course, you will learn the basics of a relational database by creating a PostgreSQL database filled with video game characters."
|
||||
]
|
||||
},
|
||||
"learn-sql-by-building-a-student-database-part-1": {
|
||||
"title": "Learn SQL by Building a Student Database: Part 1",
|
||||
"intro": [
|
||||
"SQL, or Structured Query Language, is the language for communicating with relational databases.",
|
||||
"SQL, or Structured Query Language, is the language for communicating with a relational database.",
|
||||
"In this 140 lesson course, you will create a Bash script that uses SQL to enter information about your computer science students into PostgreSQL."
|
||||
]
|
||||
},
|
||||
|
@ -26,6 +26,6 @@
|
||||
"HTML-CSS": "HTML-CSS",
|
||||
"JavaScript": "JavaScript",
|
||||
"Python": "Python",
|
||||
"Relational Databases": "Relational Databases"
|
||||
"Backend Development": "Backend Development"
|
||||
}
|
||||
}
|
||||
|
@ -425,7 +425,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"relational-databases": {
|
||||
"relational-database": {
|
||||
"title": "Bases de Datos Relacionales",
|
||||
"intro": [
|
||||
"Para estos cursos, utilizarás herramientas y software de desarrollador reales, incluyendo VS Code, PostgreSQL y la línea de comandos de Linux / Unix para completar tutoriales interactivos y crear proyectos.",
|
||||
|
@ -425,7 +425,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"relational-databases": {
|
||||
"relational-database": {
|
||||
"title": "Database relazionali",
|
||||
"intro": [
|
||||
"Per questi corsi, utilizzerai strumenti e software per veri sviluppatori tra cui VS Code, PostgreSQL, e la riga di comando Linux / Unix per completare i tutorial interattivi e costruire progetti.",
|
||||
|
@ -425,7 +425,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"relational-databases": {
|
||||
"relational-database": {
|
||||
"title": "リレーショナルデータベース",
|
||||
"intro": [
|
||||
"このコースでは、VS Code、PostgreSQL、そして Linux / Unix コマンドラインを含む本格的な開発者ツールとソフトウェアを使用して、インタラクティブなチュートリアルを完了し、プロジェクトを構築します。",
|
||||
|
@ -425,7 +425,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"relational-databases": {
|
||||
"relational-database": {
|
||||
"title": "Bancos de dados relacionais",
|
||||
"intro": [
|
||||
"Para estes cursos, você usará ferramentas e software reais de desenvolvedor, incluindo o VS Code, PostgreSQL e a linha de comando do Linux/Unix para completar tutoriais interativos e criar projetos.",
|
||||
|
@ -425,7 +425,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"relational-databases": {
|
||||
"relational-database": {
|
||||
"title": "Реляційна база даних",
|
||||
"intro": [
|
||||
"Для цих курсів ви будете використовувати реальні інструменти розробника та програмне забезпечення, включаючи VS-код, PostgreSQL, і командний рядок Linux / Unix для завершення інтерактивних уроків і створення проєктів.",
|
||||
|
@ -27,7 +27,7 @@ import {
|
||||
import { User } from '../redux/prop-types';
|
||||
import { submitNewAbout, updateUserFlag, verifyCert } from '../redux/settings';
|
||||
|
||||
const { apiLocation, showUpcomingChanges } = envData;
|
||||
const { apiLocation, deploymentEnv } = envData;
|
||||
|
||||
// TODO: update types for actions
|
||||
interface ShowSettingsProps {
|
||||
@ -98,6 +98,7 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
|
||||
isSciCompPyCertV7,
|
||||
isDataAnalysisPyCertV7,
|
||||
isMachineLearningPyCertV7,
|
||||
isRelationalDatabaseCertV8,
|
||||
isEmailVerified,
|
||||
isHonest,
|
||||
sendQuincyEmail,
|
||||
@ -195,13 +196,14 @@ export function ShowSettings(props: ShowSettingsProps): JSX.Element {
|
||||
isJsAlgoDataStructCert={isJsAlgoDataStructCert}
|
||||
isMachineLearningPyCertV7={isMachineLearningPyCertV7}
|
||||
isQaCertV7={isQaCertV7}
|
||||
isRelationalDatabaseCertV8={isRelationalDatabaseCertV8}
|
||||
isRespWebDesignCert={isRespWebDesignCert}
|
||||
isSciCompPyCertV7={isSciCompPyCertV7}
|
||||
username={username}
|
||||
verifyCert={verifyCert}
|
||||
/>
|
||||
{showUpcomingChanges && <Spacer />}
|
||||
{showUpcomingChanges && <WebhookToken />}
|
||||
{deploymentEnv == 'staging' && <Spacer />}
|
||||
{deploymentEnv == 'staging' && <WebhookToken />}
|
||||
<Spacer />
|
||||
<DangerZone />
|
||||
</main>
|
||||
|
@ -70,7 +70,8 @@ const userProps = {
|
||||
isRespWebDesignCert: true,
|
||||
isSciCompPyCertV7: true,
|
||||
isDataAnalysisPyCertV7: true,
|
||||
isMachineLearningPyCertV7: true
|
||||
isMachineLearningPyCertV7: true,
|
||||
isRelationalDatabaseCertV8: true
|
||||
},
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
||||
navigate: () => {}
|
||||
|
@ -47,6 +47,7 @@ const propTypes = {
|
||||
isJsAlgoDataStructCert: PropTypes.bool,
|
||||
isMachineLearningPyCertV7: PropTypes.bool,
|
||||
isQaCertV7: PropTypes.bool,
|
||||
isRelationalDatabaseCertV8: PropTypes.bool,
|
||||
isRespWebDesignCert: PropTypes.bool,
|
||||
isSciCompPyCertV7: PropTypes.bool,
|
||||
t: PropTypes.func.isRequired,
|
||||
@ -71,7 +72,8 @@ const isCertSelector = ({
|
||||
isRespWebDesignCert,
|
||||
isSciCompPyCertV7,
|
||||
isDataAnalysisPyCertV7,
|
||||
isMachineLearningPyCertV7
|
||||
isMachineLearningPyCertV7,
|
||||
isRelationalDatabaseCertV8
|
||||
}) => ({
|
||||
is2018DataVisCert,
|
||||
isApisMicroservicesCert,
|
||||
@ -87,7 +89,8 @@ const isCertSelector = ({
|
||||
isRespWebDesignCert,
|
||||
isSciCompPyCertV7,
|
||||
isDataAnalysisPyCertV7,
|
||||
isMachineLearningPyCertV7
|
||||
isMachineLearningPyCertV7,
|
||||
isRelationalDatabaseCertV8
|
||||
});
|
||||
|
||||
const isCertMapSelector = createSelector(
|
||||
@ -106,7 +109,8 @@ const isCertMapSelector = createSelector(
|
||||
isBackEndCert,
|
||||
isSciCompPyCertV7,
|
||||
isDataAnalysisPyCertV7,
|
||||
isMachineLearningPyCertV7
|
||||
isMachineLearningPyCertV7,
|
||||
isRelationalDatabaseCertV8
|
||||
}) => ({
|
||||
'Responsive Web Design': isRespWebDesignCert,
|
||||
'JavaScript Algorithms and Data Structures': isJsAlgoDataStructCert,
|
||||
@ -118,6 +122,7 @@ const isCertMapSelector = createSelector(
|
||||
'Scientific Computing with Python': isSciCompPyCertV7,
|
||||
'Data Analysis with Python': isDataAnalysisPyCertV7,
|
||||
'Machine Learning with Python': isMachineLearningPyCertV7,
|
||||
'Relational Database': isRelationalDatabaseCertV8,
|
||||
'Legacy Front End': isFrontEndCert,
|
||||
'Legacy Data Visualization': isDataVisCert,
|
||||
'Legacy Back End': isBackEndCert,
|
||||
@ -164,7 +169,9 @@ export class CertificationSettings extends Component {
|
||||
if (!completedProject) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const { solution, challengeFiles } = completedProject;
|
||||
|
||||
const onClickHandler = () =>
|
||||
this.setState({
|
||||
solutionViewer: {
|
||||
|
@ -233,6 +233,7 @@ const defaultTestProps = {
|
||||
isSciCompPyCertV7: false,
|
||||
isDataAnalysisPyCertV7: false,
|
||||
isMachineLearningPyCertV7: false,
|
||||
isRelationalDatabaseCertV8: false,
|
||||
username: 'developmentuser',
|
||||
verifyCert: () => {},
|
||||
errors: {},
|
||||
|
@ -1,10 +1,10 @@
|
||||
---
|
||||
title: Relational Databases
|
||||
superBlock: relational-databases
|
||||
certification: relational-databases
|
||||
title: Relational Database
|
||||
superBlock: relational-database
|
||||
certification: relational-database
|
||||
---
|
||||
|
||||
## Introduction to Relational Databases
|
||||
## Introduction to Relational Database
|
||||
|
||||
This introduction is a stub
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Introduction to Relational Databases
|
||||
block: Learn Relational Databases
|
||||
superBlock: Relational Databases
|
||||
superBlock: Relational Database
|
||||
---
|
||||
|
||||
## Placeholder
|
@ -281,7 +281,7 @@ export const certificatesByNameSelector = username => state => {
|
||||
isSciCompPyCertV7,
|
||||
isDataAnalysisPyCertV7,
|
||||
isMachineLearningPyCertV7,
|
||||
isRelationalDatabasesCertV8
|
||||
isRelationalDatabaseCertV8
|
||||
} = userByNameSelector(username)(state);
|
||||
return {
|
||||
hasModernCert:
|
||||
@ -296,7 +296,7 @@ export const certificatesByNameSelector = username => state => {
|
||||
isSciCompPyCertV7 ||
|
||||
isDataAnalysisPyCertV7 ||
|
||||
isMachineLearningPyCertV7 ||
|
||||
isRelationalDatabasesCertV8,
|
||||
isRelationalDatabaseCertV8,
|
||||
hasLegacyCert:
|
||||
isFrontEndCert || isBackEndCert || isDataVisCert || isInfosecQaCert,
|
||||
isFullStackCert,
|
||||
@ -352,9 +352,9 @@ export const certificatesByNameSelector = username => state => {
|
||||
certSlug: 'machine-learning-with-python-v7'
|
||||
},
|
||||
{
|
||||
show: isRelationalDatabasesCertV8,
|
||||
title: 'Relational Databases Certification',
|
||||
certSlug: 'relational-databases-v8'
|
||||
show: isRelationalDatabaseCertV8,
|
||||
title: 'Relational Database Certification',
|
||||
certSlug: 'relational-database-v8'
|
||||
}
|
||||
],
|
||||
legacyCerts: [
|
||||
|
@ -31,6 +31,7 @@ export const UserPropType = PropTypes.shape({
|
||||
isQaCertV7: PropTypes.bool,
|
||||
isInfosecCertV7: PropTypes.bool,
|
||||
isJsAlgoDataStructCert: PropTypes.bool,
|
||||
isRelationalDatabaseCertV8: PropTypes.bool,
|
||||
isRespWebDesignCert: PropTypes.bool,
|
||||
isSciCompPyCertV7: PropTypes.bool,
|
||||
isDataAnalysisPyCertV7: PropTypes.bool,
|
||||
@ -302,6 +303,7 @@ export type ClaimedCertifications = {
|
||||
isQaCertV7: boolean;
|
||||
isInfosecCertV7: boolean;
|
||||
isJsAlgoDataStructCert: boolean;
|
||||
isRelationalDatabaseCertV8: boolean;
|
||||
isRespWebDesignCert: boolean;
|
||||
isSciCompPyCertV7: boolean;
|
||||
isDataAnalysisPyCertV7: boolean;
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { SuperBlocks } from '../../../config/certification-settings';
|
||||
import envData from '../../../config/env.json';
|
||||
|
||||
const { showNewCurriculum, showUpcomingChanges } = envData;
|
||||
const { deploymentEnv, showNewCurriculum, showUpcomingChanges } = envData;
|
||||
|
||||
const responsiveWebBase =
|
||||
'/learn/responsive-web-design/responsive-web-design-projects';
|
||||
@ -12,8 +12,7 @@ const jsAlgoBase =
|
||||
const feLibsBase =
|
||||
'/learn/front-end-development-libraries/front-end-development-libraries-projects';
|
||||
const dataVisBase = '/learn/data-visualization/data-visualization-projects';
|
||||
const relationalDatabasesBase =
|
||||
'/learn/relational-databases/learn-relational-databases';
|
||||
const relationalDatabaseBase = '/learn/relational-database';
|
||||
const apiMicroBase =
|
||||
'/learn/back-end-development-and-apis/back-end-development-and-apis-projects';
|
||||
const qaBase = '/learn/quality-assurance/quality-assurance-projects';
|
||||
@ -458,39 +457,39 @@ const certMap = [
|
||||
},
|
||||
{
|
||||
id: '606243f50267e718b1e755f4',
|
||||
title: 'Relational Databases',
|
||||
certSlug: SuperBlocks.RelationalDb,
|
||||
flag: 'isRelationalDatabasesCert',
|
||||
title: 'Relational Database',
|
||||
certSlug: 'relational-database-v8',
|
||||
flag: 'isRelationalDatabaseCertV8',
|
||||
projects: [
|
||||
{
|
||||
id: '5f1a4ef5d5d6b5ab580fc6ae',
|
||||
title: 'Celestial Bodies Database',
|
||||
link: `${relationalDatabasesBase}/celestial-bodies-database`,
|
||||
superBlock: SuperBlocks.RelationalDb
|
||||
},
|
||||
{
|
||||
id: '5f87ac112ae598023a42df1a',
|
||||
title: 'Salon Appointment Scheduler',
|
||||
link: `${relationalDatabasesBase}/salon-appointment-scheduler`,
|
||||
superBlock: SuperBlocks.RelationalDb
|
||||
link: `${relationalDatabaseBase}/build-a-celestial-bodies-database-project/build-a-celestial-bodies-database`,
|
||||
certSlug: 'relational-database-v8'
|
||||
},
|
||||
{
|
||||
id: '5f9771307d4d22b9d2b75a94',
|
||||
title: 'World Cup Database',
|
||||
link: `${relationalDatabasesBase}/world-cup-database`,
|
||||
superBlock: SuperBlocks.RelationalDb
|
||||
link: `${relationalDatabaseBase}/build-a-world-cup-database-project/build-a-world-cup-database`,
|
||||
certSlug: 'relational-database-v8'
|
||||
},
|
||||
{
|
||||
id: '5f87ac112ae598023a42df1a',
|
||||
title: 'Salon Appointment Scheduler',
|
||||
link: `${relationalDatabaseBase}/build-a-salon-appointment-scheduler-project/build-a-salon-appointment-scheduler`,
|
||||
certSlug: 'relational-database-v8'
|
||||
},
|
||||
{
|
||||
id: '602d9ff222201c65d2a019f2',
|
||||
title: 'Periodic Table Database',
|
||||
link: `${relationalDatabasesBase}/periodic-table-database`,
|
||||
superBlock: SuperBlocks.RelationalDb
|
||||
link: `${relationalDatabaseBase}/build-a-periodic-table-database-project/build-a-periodic-table-database`,
|
||||
certSlug: 'relational-database-v8'
|
||||
},
|
||||
{
|
||||
id: '602da04c22201c65d2a019f4',
|
||||
title: 'Number Guessing Game',
|
||||
link: `${relationalDatabasesBase}/number-guessing-game`,
|
||||
superBlock: SuperBlocks.RelationalDb
|
||||
link: `${relationalDatabaseBase}/build-a-number-guessing-game-project/build-a-number-guessing-game`,
|
||||
certSlug: 'relational-database-v8'
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -746,8 +745,11 @@ certMap.forEach(cert => {
|
||||
if (cert.title !== 'Legacy Full Stack') {
|
||||
if (cert.title.startsWith('Legacy')) {
|
||||
legacyProjectMap[cert.title] = cert.projects;
|
||||
// temporary hiding of RDBMS cert
|
||||
// should do suggestion on line 33 and use front matter to hide it
|
||||
} else if (
|
||||
cert.title.startsWith('Relational') &&
|
||||
deploymentEnv == 'staging'
|
||||
) {
|
||||
projectMap[cert.title] = cert.projects;
|
||||
} else if (!cert.title.startsWith('Relational')) {
|
||||
projectMap[cert.title] = cert.projects;
|
||||
}
|
||||
|
@ -115,16 +115,21 @@ class ShowCodeAlly extends Component<ShowCodeAllyProps, ShowCodeAllyState> {
|
||||
|
||||
componentDidMount(): void {
|
||||
const {
|
||||
updateChallengeMeta,
|
||||
challengeMounted,
|
||||
data: {
|
||||
challengeNode: {
|
||||
challenge: { challengeType, title }
|
||||
challenge: { challengeType, helpCategory, title }
|
||||
}
|
||||
},
|
||||
pageContext: { challengeMeta }
|
||||
pageContext: { challengeMeta },
|
||||
updateChallengeMeta
|
||||
} = this.props;
|
||||
updateChallengeMeta({ ...challengeMeta, title, challengeType });
|
||||
updateChallengeMeta({
|
||||
...challengeMeta,
|
||||
title,
|
||||
challengeType,
|
||||
helpCategory
|
||||
});
|
||||
challengeMounted(challengeMeta.id);
|
||||
this._container?.focus();
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ const {
|
||||
getChallengesDirForLang
|
||||
} = require('../../curriculum/getChallenges');
|
||||
|
||||
const { curriculumLocale } = envData;
|
||||
const { curriculumLocale, deploymentEnv } = envData;
|
||||
|
||||
exports.localeChallengesRootDir = getChallengesDirForLang(curriculumLocale);
|
||||
|
||||
@ -38,6 +38,12 @@ exports.replaceChallengeNode = () => {
|
||||
|
||||
exports.buildChallenges = async function buildChallenges() {
|
||||
const curriculum = await getChallengesForLang(curriculumLocale);
|
||||
|
||||
// temp removal of rdbms from production
|
||||
if (deploymentEnv !== 'staging') {
|
||||
delete curriculum['13-relational-databases'];
|
||||
}
|
||||
|
||||
const superBlocks = Object.keys(curriculum);
|
||||
const blocks = superBlocks
|
||||
.map(superBlock => curriculum[superBlock].blocks)
|
||||
|
@ -14,7 +14,7 @@ export const certTypes = {
|
||||
dataAnalysisPyV7: 'isDataAnalysisPyCertV7',
|
||||
machineLearningPyV7: 'isMachineLearningPyCertV7',
|
||||
fullStack: 'isFullStackCert',
|
||||
relationalDatabasesV8: 'isRelationalDatabasesCertV8'
|
||||
relationalDatabaseV8: 'isRelationalDatabaseCertV8'
|
||||
};
|
||||
|
||||
export enum SuperBlocks {
|
||||
@ -23,7 +23,7 @@ export enum SuperBlocks {
|
||||
JsAlgoDataStruct = 'javascript-algorithms-and-data-structures',
|
||||
FrontEndDevLibs = 'front-end-development-libraries',
|
||||
DataVis = 'data-visualization',
|
||||
RelationalDb = 'relational-databases',
|
||||
RelationalDb = 'relational-database',
|
||||
BackEndDevApis = 'back-end-development-and-apis',
|
||||
QualityAssurance = 'quality-assurance',
|
||||
SciCompPy = 'scientific-computing-with-python',
|
||||
@ -49,7 +49,7 @@ export const certIds = {
|
||||
sciCompPyV7Id: '5e44431b903586ffb414c951',
|
||||
dataAnalysisPyV7Id: '5e46fc95ac417301a38fb934',
|
||||
machineLearningPyV7Id: '5e46fc95ac417301a38fb935',
|
||||
relationalDatabasesV8Id: '606243f50267e718b1e755f4'
|
||||
relationalDatabaseV8Id: '606243f50267e718b1e755f4'
|
||||
};
|
||||
|
||||
export const completionHours = {
|
||||
@ -68,7 +68,7 @@ export const completionHours = {
|
||||
[certTypes.sciCompPyV7]: 300,
|
||||
[certTypes.dataAnalysisPyV7]: 300,
|
||||
[certTypes.machineLearningPyV7]: 300,
|
||||
[certTypes.relationalDatabasesV8]: 300
|
||||
[certTypes.relationalDatabaseV8]: 300
|
||||
};
|
||||
|
||||
export const certSlugTypeMap = {
|
||||
@ -92,7 +92,7 @@ export const certSlugTypeMap = {
|
||||
'scientific-computing-with-python-v7': certTypes.sciCompPyV7,
|
||||
'data-analysis-with-python-v7': certTypes.dataAnalysisPyV7,
|
||||
'machine-learning-with-python-v7': certTypes.machineLearningPyV7,
|
||||
'relational-databases-v8': certTypes.relationalDatabasesV8
|
||||
'relational-database-v8': certTypes.relationalDatabaseV8
|
||||
};
|
||||
|
||||
export const superBlockCertTypeMap = {
|
||||
@ -114,7 +114,7 @@ export const superBlockCertTypeMap = {
|
||||
[SuperBlocks.SciCompPy]: certTypes.sciCompPyV7,
|
||||
[SuperBlocks.DataAnalysisPy]: certTypes.dataAnalysisPyV7,
|
||||
[SuperBlocks.MachineLearningPy]: certTypes.machineLearningPyV7,
|
||||
[SuperBlocks.RelationalDb]: certTypes.relationalDatabasesV8,
|
||||
[SuperBlocks.RelationalDb]: certTypes.relationalDatabaseV8,
|
||||
|
||||
// post-modern
|
||||
// TODO: use enum
|
||||
@ -137,7 +137,7 @@ export const certTypeIdMap = {
|
||||
[certTypes.sciCompPyV7]: certIds.sciCompPyV7Id,
|
||||
[certTypes.dataAnalysisPyV7]: certIds.dataAnalysisPyV7Id,
|
||||
[certTypes.machineLearningPyV7]: certIds.machineLearningPyV7Id,
|
||||
[certTypes.relationalDatabasesV8]: certIds.relationalDatabasesV8Id
|
||||
[certTypes.relationalDatabaseV8]: certIds.relationalDatabaseV8Id
|
||||
};
|
||||
|
||||
export const certTypeTitleMap = {
|
||||
@ -156,7 +156,7 @@ export const certTypeTitleMap = {
|
||||
[certTypes.sciCompPyV7]: 'Scientific Computing with Python',
|
||||
[certTypes.dataAnalysisPyV7]: 'Data Analysis with Python',
|
||||
[certTypes.machineLearningPyV7]: 'Machine Learning with Python',
|
||||
[certTypes.relationalDatabasesV8]: 'Relational Databases'
|
||||
[certTypes.relationalDatabaseV8]: 'Relational Database'
|
||||
};
|
||||
|
||||
export const oldDataVizId = '561add10cb82ac38a17513b3';
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Build a Celestial Bodies Database Project",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 2,
|
||||
"time": "30 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"5f1a4ef5d5d6b5ab580fc6ae",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Build a Number Guessing Game Project",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 13,
|
||||
"time": "30 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"602da04c22201c65d2a019f4",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Build a Periodic Table Database Project",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 12,
|
||||
"time": "30 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"602d9ff222201c65d2a019f2",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Build a Salon Appointment Scheduler Project",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 9,
|
||||
"time": "30 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"5f87ac112ae598023a42df1a",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Build a World Cup Database Project",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 6,
|
||||
"time": "30 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"5f9771307d4d22b9d2b75a94",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Learn Advanced Bash by Building a Kitty Ipsum Translator",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 7,
|
||||
"time": "5 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"602da0de22201c65d2a019f6",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Learn Bash and SQL by Building a Bike Rental Shop",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 8,
|
||||
"time": "5 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"5f5b969a05380d2179fe6e18",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Learn Bash by Building a Boilerplate",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 0,
|
||||
"time": "5 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"5ea8adfab628f68d805bfc5e",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Learn Bash Scripting by Building Five Programs",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 3,
|
||||
"time": "5 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"5f5904ac738bc2fa9efecf5a",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Learn Git by Building an SQL Reference Object",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 11,
|
||||
"time": "5 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"5fa323cdaf6a73463d590659",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Learn Nano by Building a Castle",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 10,
|
||||
"time": "5 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"5f32db63eb37f7e17323f459",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Learn Relational Databases by Building a Mario Database",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 1,
|
||||
"time": "5 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"5f2c289f164c29556da632fd",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Learn SQL by Building a Student Database: Part 1",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 4,
|
||||
"time": "5 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"602da0c222201c65d2a019f5",
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "Learn SQL by Building a Student Database: Part 2",
|
||||
"isUpcomingChange": true,
|
||||
"isUpcomingChange": false,
|
||||
"order": 5,
|
||||
"time": "5 hours",
|
||||
"template": "",
|
||||
"required": [],
|
||||
"superBlock": "relational-databases",
|
||||
"superBlock": "relational-database",
|
||||
"challengeOrder": [
|
||||
[
|
||||
"618590adb0730ca724e37672",
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 606243f50267e718b1e755f4
|
||||
title: 關係數據庫認證
|
||||
certification: relational-databases
|
||||
certification: relational-database
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 606243f50267e718b1e755f4
|
||||
title: 关系数据库认证
|
||||
certification: relational-databases
|
||||
certification: relational-database
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
@ -1,6 +1,6 @@
|
||||
id: 606243f50267e718b1e755f4
|
||||
title: Relational Databases Certification
|
||||
certification: relational-databases
|
||||
title: Relational Database Certification
|
||||
certification: relational-database
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
@ -9,7 +9,7 @@ dashedName: build-a-mario-database
|
||||
|
||||
# --description--
|
||||
|
||||
In this 165 lesson course, you will learn the basics of relational databases by creating a PostgreSQL database filled with video game characters.
|
||||
In this 165 lesson course, you will learn the basics of a relational database by creating a PostgreSQL database filled with video game characters.
|
||||
|
||||
# --instructions--
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 606243f50267e718b1e755f4
|
||||
title: Certificación en Base de Datos Relacionales
|
||||
certification: relational-databases
|
||||
certification: relational-database
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 606243f50267e718b1e755f4
|
||||
title: Certificazione Database Relazionali
|
||||
certification: relational-databases
|
||||
certification: relational-database
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 606243f50267e718b1e755f4
|
||||
title: リレーショナルデータベース認定証
|
||||
certification: relational-databases
|
||||
certification: relational-database
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 606243f50267e718b1e755f4
|
||||
title: Certificação de banco de dados relacional
|
||||
certification: relational-databases
|
||||
certification: relational-database
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 606243f50267e718b1e755f4
|
||||
title: Сертифікація реляційних баз даних
|
||||
certification: relational-databases
|
||||
certification: relational-database
|
||||
challengeType: 7
|
||||
isPrivate: true
|
||||
tests:
|
@ -25,7 +25,7 @@ const superBlockToOrder = {
|
||||
'javascript-algorithms-and-data-structures': 1,
|
||||
'front-end-development-libraries': 2,
|
||||
'data-visualization': 3,
|
||||
'relational-databases': 4,
|
||||
'relational-database': 4,
|
||||
'back-end-development-and-apis': 5,
|
||||
'quality-assurance': 6,
|
||||
'scientific-computing-with-python': 7,
|
||||
@ -40,7 +40,7 @@ const superBlockToNewOrder = {
|
||||
'javascript-algorithms-and-data-structures': 1,
|
||||
'front-end-development-libraries': 2,
|
||||
'data-visualization': 3,
|
||||
'relational-databases': 4,
|
||||
'relational-database': 4,
|
||||
'back-end-development-and-apis': 5,
|
||||
'quality-assurance': 6,
|
||||
'scientific-computing-with-python': 7,
|
||||
|
@ -25,7 +25,7 @@ describe('getSuperOrder', () => {
|
||||
expect(getSuperOrder('javascript-algorithms-and-data-structures')).toBe(1);
|
||||
expect(getSuperOrder('front-end-development-libraries')).toBe(2);
|
||||
expect(getSuperOrder('data-visualization')).toBe(3);
|
||||
expect(getSuperOrder('relational-databases')).toBe(4);
|
||||
expect(getSuperOrder('relational-database')).toBe(4);
|
||||
expect(getSuperOrder('back-end-development-and-apis')).toBe(5);
|
||||
expect(getSuperOrder('quality-assurance')).toBe(6);
|
||||
expect(getSuperOrder('scientific-computing-with-python')).toBe(7);
|
||||
@ -54,7 +54,7 @@ describe('getSuperOrder', () => {
|
||||
getSuperOrder('data-visualization', { showNewCurriculum: true })
|
||||
).toBe(3);
|
||||
expect(
|
||||
getSuperOrder('relational-databases', { showNewCurriculum: true })
|
||||
getSuperOrder('relational-database', { showNewCurriculum: true })
|
||||
).toBe(4);
|
||||
expect(
|
||||
getSuperOrder('back-end-development-and-apis', {
|
||||
|
@ -58,7 +58,7 @@ describe('Landing page', () => {
|
||||
});
|
||||
|
||||
it('Has links to all the certifications', function () {
|
||||
cy.get(selectors.certifications).children().its('length').should('eq', 11);
|
||||
cy.get(selectors.certifications).children().its('length').should('eq', 12);
|
||||
cy.wrap(certifications).each(cert => {
|
||||
cy.get(selectors.certifications).contains(cert);
|
||||
});
|
||||
|
@ -11,6 +11,7 @@ const superBlockNames = [
|
||||
'JavaScript Algorithms and Data Structures Certification',
|
||||
'Front End Development Libraries Certification',
|
||||
'Data Visualization Certification',
|
||||
'Relational Database Certification',
|
||||
'Back End Development and APIs Certification',
|
||||
'Quality Assurance Certification',
|
||||
'Scientific Computing with Python Certification',
|
||||
@ -42,7 +43,7 @@ describe('Learn Landing page (not logged in)', () => {
|
||||
const superBlocks = document.querySelectorAll(
|
||||
`${selectors.challengeMap} > li > a`
|
||||
);
|
||||
expect(superBlocks).to.have.length(12);
|
||||
expect(superBlocks).to.have.length(13);
|
||||
|
||||
superBlocks.forEach((superBlock, idx) => {
|
||||
expect(superBlock.innerText).to.have.string(superBlockNames[idx]);
|
||||
|
@ -10,7 +10,7 @@ describe('Settings certifications area', () => {
|
||||
it('Should render the default settings page', () => {
|
||||
cy.visit('/settings/');
|
||||
cy.findAllByText('Claim Certification').should($btns => {
|
||||
expect($btns).to.have.length(15);
|
||||
expect($btns).to.have.length(16);
|
||||
});
|
||||
cy.findByText('Show Certification').should('not.exist');
|
||||
cy.contains('Agree');
|
||||
|
@ -34,6 +34,7 @@ module.exports = {
|
||||
isSciCompPyCertV7: true,
|
||||
isDataAnalysisPyCertV7: true,
|
||||
isMachineLearningPyCertV7: true,
|
||||
isRelationalDatabaseCertV8: true,
|
||||
completedChallenges: [
|
||||
{ id: 'bd7123c8c441eddfaeb5bdef', completedDate: 1475094716730, files: [] },
|
||||
{ id: '5895f70bf9fc0f352b528e64', completedDate: 1537207306322, files: [] },
|
||||
@ -4628,6 +4629,82 @@ module.exports = {
|
||||
completedDate: 1538239301985,
|
||||
challengeType: 7,
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566694752,
|
||||
id: '602da04c22201c65d2a019f4',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566450182,
|
||||
id: '602d9ff222201c65d2a019f2',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566442917,
|
||||
id: '5fa323cdaf6a73463d590659',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566429622,
|
||||
id: '5f32db63eb37f7e17323f459',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566416673,
|
||||
id: '5f87ac112ae598023a42df1a',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566406680,
|
||||
id: '5f5b969a05380d2179fe6e18',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566390464,
|
||||
id: '602da0de22201c65d2a019f6',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566369992,
|
||||
id: '5f9771307d4d22b9d2b75a94',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566358706,
|
||||
id: '618590adb0730ca724e37672',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566353635,
|
||||
id: '602da0c222201c65d2a019f5',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566336874,
|
||||
id: '5f5904ac738bc2fa9efecf5a',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566305566,
|
||||
id: '5f1a4ef5d5d6b5ab580fc6ae',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566297762,
|
||||
id: '5f2c289f164c29556da632fd',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642566255203,
|
||||
id: '5ea8adfab628f68d805bfc5e',
|
||||
files: []
|
||||
},
|
||||
{
|
||||
completedDate: 1642615978255,
|
||||
id: '606243f50267e718b1e755f4',
|
||||
challengeType: 7,
|
||||
files: []
|
||||
}
|
||||
],
|
||||
portfolio: [],
|
||||
|
@ -59,6 +59,7 @@ const authUser = {
|
||||
isSciCompPyCertV7: false,
|
||||
isDataAnalysisPyCertV7: false,
|
||||
isMachineLearningPyCertV7: false,
|
||||
isRelationalDatabaseCertV8: false,
|
||||
completedChallenges: [],
|
||||
portfolio: [],
|
||||
yearsTopContributor: envVariables.includes('--top-contributor')
|
||||
@ -118,6 +119,7 @@ const blankUser = {
|
||||
isSciCompPyCertV7: false,
|
||||
isDataAnalysisPyCertV7: false,
|
||||
isMachineLearningPyCertV7: false,
|
||||
isRelationalDatabaseCertV8: false,
|
||||
completedChallenges: [],
|
||||
portfolio: [],
|
||||
yearsTopContributor: [],
|
||||
|
Reference in New Issue
Block a user