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