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:
Tom
2022-02-18 10:29:30 -06:00
committed by GitHub
parent 395d9de8af
commit fd14608492
59 changed files with 240 additions and 124 deletions

View File

@@ -425,7 +425,7 @@
}
}
},
"relational-databases": {
"relational-database": {
"title": "關係型數據庫",
"intro": [
"對於這些課程,你將使用真正的開發者工具和軟件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,來完成交互式教程和構建項目。",

View File

@@ -425,7 +425,7 @@
}
}
},
"relational-databases": {
"relational-database": {
"title": "关系型数据库",
"intro": [
"对于这些课程,你将使用真正的开发者工具和软件,包括 VS Code、PostgreSQL 和 Linux / Unix 命令行,来完成交互式教程和构建项目。",

View File

@@ -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."
]
},

View File

@@ -26,6 +26,6 @@
"HTML-CSS": "HTML-CSS",
"JavaScript": "JavaScript",
"Python": "Python",
"Relational Databases": "Relational Databases"
"Backend Development": "Backend Development"
}
}

View File

@@ -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.",

View File

@@ -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.",

View File

@@ -425,7 +425,7 @@
}
}
},
"relational-databases": {
"relational-database": {
"title": "リレーショナルデータベース",
"intro": [
"このコースでは、VS Code、PostgreSQL、そして Linux / Unix コマンドラインを含む本格的な開発者ツールとソフトウェアを使用して、インタラクティブなチュートリアルを完了し、プロジェクトを構築します。",

View File

@@ -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.",

View File

@@ -425,7 +425,7 @@
}
}
},
"relational-databases": {
"relational-database": {
"title": "Реляційна база даних",
"intro": [
"Для цих курсів ви будете використовувати реальні інструменти розробника та програмне забезпечення, включаючи VS-код, PostgreSQL, і командний рядок Linux / Unix для завершення інтерактивних уроків і створення проєктів.",

View File

@@ -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>

View File

@@ -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: () => {}

View File

@@ -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: {

View File

@@ -233,6 +233,7 @@ const defaultTestProps = {
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
username: 'developmentuser',
verifyCert: () => {},
errors: {},

View File

@@ -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

View File

@@ -1,7 +1,7 @@
---
title: Introduction to Relational Databases
block: Learn Relational Databases
superBlock: Relational Databases
superBlock: Relational Database
---
## Placeholder

View File

@@ -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: [

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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();
}

View File

@@ -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)