feat: release rdb and python certs (#64253)

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
Co-authored-by: moT01 <20648924+moT01@users.noreply.github.com>
This commit is contained in:
Shaun Hamilton
2025-12-09 21:55:36 +02:00
committed by GitHub
parent d9b5f4f8af
commit d28fbdf081
27 changed files with 175 additions and 114 deletions
+2
View File
@@ -124,8 +124,10 @@ model user {
isJsAlgoDataStructCert Boolean? // Undefined
isJsAlgoDataStructCertV8 Boolean? // Undefined
isMachineLearningPyCertV7 Boolean? // Undefined
isPythonCertV9 Boolean? // Undefined
isQaCertV7 Boolean? // Undefined
isRelationalDatabaseCertV8 Boolean? // Undefined
isRelationalDatabaseCertV9 Boolean? // Undefined
isRespWebDesignCert Boolean? // Undefined
isRespWebDesignCertV9 Boolean? // Undefined
isSciCompPyCertV7 Boolean? // Undefined
+2
View File
@@ -48,8 +48,10 @@ export const newUser = (email: string) => ({
isJsAlgoDataStructCert: false,
isJsAlgoDataStructCertV8: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isCollegeAlgebraPyCertV8: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
+2
View File
@@ -26,8 +26,10 @@ const nullableFlags = [
'isJsAlgoDataStructCert',
'isJsAlgoDataStructCertV8',
'isMachineLearningPyCertV7',
'isPythonCertV9',
'isQaCertV7',
'isRelationalDatabaseCertV8',
'isRelationalDatabaseCertV9',
'isRespWebDesignCert',
'isRespWebDesignCertV9',
'isSciCompPyCertV7',
+30 -22
View File
@@ -39,23 +39,25 @@ describe('certificate routes', () => {
where: { email: defaultUserEmail },
data: {
completedChallenges: [],
name: 'fcc',
isA2EnglishCert: false,
isRespWebDesignCert: false,
isJsAlgoDataStructCert: false,
isFrontEndLibsCert: false,
is2018DataVisCert: false,
isRelationalDatabaseCertV8: false,
isA2EnglishCert: false,
isApisMicroservicesCert: false,
isQaCertV7: false,
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isInfosecCertV7: false,
isMachineLearningPyCertV7: false,
isCollegeAlgebraPyCertV8: false,
isDataAnalysisPyCertV7: false,
isFoundationalCSharpCertV8: false,
isFrontEndLibsCert: false,
isInfosecCertV7: false,
isJsAlgoDataStructCert: false,
isJavascriptCertV9: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,
name: 'fcc',
username: 'fcc'
}
});
@@ -154,8 +156,10 @@ describe('certificate routes', () => {
isInfosecQaCert: false,
isJsAlgoDataStructCert: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCert: false,
isSciCompPyCertV7: false,
isJavascriptCertV9: false,
@@ -234,22 +238,24 @@ describe('certificate routes', () => {
{ id: '587d78b0367417b2b2512b05', completedDate: 123456789 },
{ id: 'bd7158d8c242eddfaeb5bd13', completedDate: 123456789 }
],
isRespWebDesignCert: false,
isJsAlgoDataStructCertV8: true,
isFrontEndLibsCert: true,
is2018DataVisCert: true,
isRelationalDatabaseCertV8: true,
isA2EnglishCert: true,
isApisMicroservicesCert: true,
isQaCertV7: true,
isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true,
isInfosecCertV7: true,
isMachineLearningPyCertV7: true,
isCollegeAlgebraPyCertV8: true,
isDataAnalysisPyCertV7: true,
isFoundationalCSharpCertV8: true,
isFrontEndLibsCert: true,
isInfosecCertV7: true,
isJavascriptCertV9: true,
isJsAlgoDataStructCertV8: true,
isMachineLearningPyCertV7: true,
isPythonCertV9: true,
isQaCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isRespWebDesignCert: false,
isRespWebDesignCertV9: true,
isA2EnglishCert: true
isSciCompPyCertV7: true
}
});
@@ -323,7 +329,9 @@ describe('certificate routes', () => {
isMachineLearningPyCertV7: false,
isRelationalDatabaseCertV8: false,
isCollegeAlgebraPyCertV8: false,
isFoundationalCSharpCertV8: false
isFoundationalCSharpCertV8: false,
isPythonCertV9: false,
isRelationalDatabaseCertV9: false
},
completedChallenges: [
{
+64 -56
View File
@@ -123,78 +123,84 @@ export function createCertLookup(
interface CertI {
isA2EnglishCert?: boolean;
isRespWebDesignCert?: boolean;
isApisMicroservicesCert?: boolean;
isBackEndCert?: boolean;
isCollegeAlgebraPyCertV8?: boolean;
isDataAnalysisPyCertV7?: boolean;
isDataVisCert?: boolean;
isFrontEndCert?: boolean;
isFrontEndLibsCert?: boolean;
isFoundationalCSharpCertV8?: boolean;
isFullStackCert?: boolean;
isInfosecCertV7?: boolean;
isInfosecQaCert?: boolean;
isJavascriptCertV9?: boolean;
isJsAlgoDataStructCert?: boolean;
isJsAlgoDataStructCertV8?: boolean;
isFrontEndLibsCert?: boolean;
is2018DataVisCert?: boolean;
isApisMicroservicesCert?: boolean;
isInfosecQaCert?: boolean;
isQaCertV7?: boolean;
isInfosecCertV7?: boolean;
isFrontEndCert?: boolean;
isBackEndCert?: boolean;
isDataVisCert?: boolean;
isFullStackCert?: boolean;
isSciCompPyCertV7?: boolean;
isDataAnalysisPyCertV7?: boolean;
isMachineLearningPyCertV7?: boolean;
isPythonCertV9?: boolean;
isQaCertV7?: boolean;
isRelationalDatabaseCertV8?: boolean;
isCollegeAlgebraPyCertV8?: boolean;
isFoundationalCSharpCertV8?: boolean;
isJavascriptCertV9?: boolean;
isRelationalDatabaseCertV9?: boolean;
isRespWebDesignCert?: boolean;
isRespWebDesignCertV9?: boolean;
isSciCompPyCertV7?: boolean;
is2018DataVisCert?: boolean;
}
function getUserIsCertMap(user: CertI) {
const {
isA2EnglishCert = false,
isRespWebDesignCert = false,
isApisMicroservicesCert = false,
isBackEndCert = false,
isCollegeAlgebraPyCertV8 = false,
isDataAnalysisPyCertV7 = false,
isDataVisCert = false,
isFrontEndCert = false,
isFrontEndLibsCert = false,
isFoundationalCSharpCertV8 = false,
isFullStackCert = false,
isInfosecCertV7 = false,
isInfosecQaCert = false,
isJavascriptCertV9 = false,
isJsAlgoDataStructCert = false,
isJsAlgoDataStructCertV8 = false,
isFrontEndLibsCert = false,
is2018DataVisCert = false,
isApisMicroservicesCert = false,
isInfosecQaCert = false,
isQaCertV7 = false,
isInfosecCertV7 = false,
isFrontEndCert = false,
isBackEndCert = false,
isDataVisCert = false,
isFullStackCert = false,
isSciCompPyCertV7 = false,
isDataAnalysisPyCertV7 = false,
isMachineLearningPyCertV7 = false,
isPythonCertV9 = false,
isQaCertV7 = false,
isRelationalDatabaseCertV8 = false,
isCollegeAlgebraPyCertV8 = false,
isFoundationalCSharpCertV8 = false,
isJavascriptCertV9 = false,
isRespWebDesignCertV9 = false
isRelationalDatabaseCertV9 = false,
isRespWebDesignCert = false,
isRespWebDesignCertV9 = false,
isSciCompPyCertV7 = false,
is2018DataVisCert = false
} = user;
return {
isA2EnglishCert,
isRespWebDesignCert,
isApisMicroservicesCert,
isBackEndCert,
isCollegeAlgebraPyCertV8,
isDataAnalysisPyCertV7,
isDataVisCert,
isFrontEndCert,
isFrontEndLibsCert,
isFoundationalCSharpCertV8,
isFullStackCert,
isInfosecCertV7,
isInfosecQaCert,
isJavascriptCertV9,
isJsAlgoDataStructCert,
isJsAlgoDataStructCertV8,
isFrontEndLibsCert,
is2018DataVisCert,
isApisMicroservicesCert,
isInfosecQaCert,
isQaCertV7,
isInfosecCertV7,
isFrontEndCert,
isBackEndCert,
isDataVisCert,
isFullStackCert,
isSciCompPyCertV7,
isDataAnalysisPyCertV7,
isMachineLearningPyCertV7,
isPythonCertV9,
isQaCertV7,
isRelationalDatabaseCertV8,
isCollegeAlgebraPyCertV8,
isFoundationalCSharpCertV8,
isJavascriptCertV9,
isRespWebDesignCertV9
isRelationalDatabaseCertV9,
isRespWebDesignCert,
isRespWebDesignCertV9,
isSciCompPyCertV7,
is2018DataVisCert
};
}
@@ -335,33 +341,35 @@ export const protectedCertificateRoutes: FastifyPluginCallbackTypebox = (
}
},
select: {
username: true,
completedChallenges: true,
email: true,
name: true,
completedChallenges: true,
username: true,
is2018DataVisCert: true,
is2018FullStackCert: true,
isA2EnglishCert: true,
isApisMicroservicesCert: true,
isBackEndCert: true,
isDataVisCert: true,
isCollegeAlgebraPyCertV8: true,
isDataAnalysisPyCertV7: true,
isDataVisCert: true,
isFoundationalCSharpCertV8: true,
isFrontEndCert: true,
isFrontEndLibsCert: true,
isFullStackCert: true,
isInfosecCertV7: true,
isInfosecQaCert: true,
isJavascriptCertV9: true,
isJsAlgoDataStructCert: true,
isJsAlgoDataStructCertV8: true,
isMachineLearningPyCertV7: true,
isPythonCertV9: true,
isQaCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isRespWebDesignCert: true,
isSciCompPyCertV7: true,
isJavascriptCertV9: true,
isRespWebDesignCertV9: true
isRespWebDesignCertV9: true,
isSciCompPyCertV7: true
}
});
+6
View File
@@ -293,8 +293,10 @@ const publicUserData = {
isJsAlgoDataStructCert: testUserData.isJsAlgoDataStructCert,
isJsAlgoDataStructCertV8: testUserData.isJsAlgoDataStructCertV8,
isMachineLearningPyCertV7: testUserData.isMachineLearningPyCertV7,
isPythonCertV9: testUserData.isPythonCertV9,
isQaCertV7: testUserData.isQaCertV7,
isRelationalDatabaseCertV8: testUserData.isRelationalDatabaseCertV8,
isRelationalDatabaseCertV9: testUserData.isRelationalDatabaseCertV9,
isRespWebDesignCert: testUserData.isRespWebDesignCert,
isRespWebDesignCertV9: testUserData.isRespWebDesignCertV9,
isSciCompPyCertV7: testUserData.isSciCompPyCertV7,
@@ -345,7 +347,9 @@ const baseProgressData = {
isSciCompPyCertV7: false,
isDataAnalysisPyCertV7: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCertV9: false,
isCollegeAlgebraPyCertV8: false,
completedChallenges: [],
@@ -1018,8 +1022,10 @@ describe('userRoutes', () => {
isJsAlgoDataStructCert: false,
isJsAlgoDataStructCertV8: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,
+2
View File
@@ -701,8 +701,10 @@ export const userGetRoutes: FastifyPluginCallbackTypebox = (
isJsAlgoDataStructCert: true,
isJsAlgoDataStructCertV8: true,
isMachineLearningPyCertV7: true,
isPythonCertV9: true,
isQaCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isRespWebDesignCert: true,
isRespWebDesignCertV9: true,
isSciCompPyCertV7: true,
+2
View File
@@ -74,12 +74,14 @@ export const unprotectedCertificateRoutes: FastifyPluginCallbackTypebox = (
is2018DataVisCert: true,
isApisMicroservicesCert: true,
isInfosecQaCert: true,
isPythonCertV9: true,
isQaCertV7: true,
isInfosecCertV7: true,
isSciCompPyCertV7: true,
isDataAnalysisPyCertV7: true,
isMachineLearningPyCertV7: true,
isRelationalDatabaseCertV8: true,
isRelationalDatabaseCertV9: true,
isCollegeAlgebraPyCertV8: true,
isFoundationalCSharpCertV8: true,
isHonest: true,
+2
View File
@@ -206,8 +206,10 @@ const publicUserData = {
isJsAlgoDataStructCert: testUserData.isJsAlgoDataStructCert,
isJsAlgoDataStructCertV8: testUserData.isJsAlgoDataStructCertV8,
isMachineLearningPyCertV7: testUserData.isMachineLearningPyCertV7,
isPythonCertV9: testUserData.isPythonCertV9,
isQaCertV7: testUserData.isQaCertV7,
isRelationalDatabaseCertV8: testUserData.isRelationalDatabaseCertV8,
isRelationalDatabaseCertV9: testUserData.isRelationalDatabaseCertV9,
isRespWebDesignCert: testUserData.isRespWebDesignCert,
isRespWebDesignCertV9: testUserData.isRespWebDesignCertV9,
isSciCompPyCertV7: testUserData.isSciCompPyCertV7,
+2
View File
@@ -15,6 +15,7 @@ export const isCertMap = Type.Object({
is2018DataVisCert: Type.Boolean(),
isApisMicroservicesCert: Type.Boolean(),
isInfosecQaCert: Type.Boolean(),
isPythonCertV9: Type.Boolean(),
isQaCertV7: Type.Boolean(),
isInfosecCertV7: Type.Boolean(),
isFrontEndCert: Type.Boolean(),
@@ -25,6 +26,7 @@ export const isCertMap = Type.Object({
isDataAnalysisPyCertV7: Type.Boolean(),
isMachineLearningPyCertV7: Type.Boolean(),
isRelationalDatabaseCertV8: Type.Boolean(),
isRelationalDatabaseCertV9: Type.Boolean(),
isCollegeAlgebraPyCertV8: Type.Boolean(),
isFoundationalCSharpCertV8: Type.Boolean()
});
+2
View File
@@ -86,8 +86,10 @@ export const getSessionUser = {
isJsAlgoDataStructCert: Type.Boolean(),
isJsAlgoDataStructCertV8: Type.Boolean(),
isMachineLearningPyCertV7: Type.Boolean(),
isPythonCertV9: Type.Boolean(),
isQaCertV7: Type.Boolean(),
isRelationalDatabaseCertV8: Type.Boolean(),
isRelationalDatabaseCertV9: Type.Boolean(),
isRespWebDesignCert: Type.Boolean(),
isRespWebDesignCertV9: Type.Boolean(),
isSciCompPyCertV7: Type.Boolean(),
@@ -72,8 +72,10 @@ export const getPublicProfile = {
isJsAlgoDataStructCert: Type.Boolean(),
isJsAlgoDataStructCertV8: Type.Boolean(),
isMachineLearningPyCertV7: Type.Boolean(),
isPythonCertV9: Type.Boolean(),
isQaCertV7: Type.Boolean(),
isRelationalDatabaseCertV8: Type.Boolean(),
isRelationalDatabaseCertV9: Type.Boolean(),
isRespWebDesignCert: Type.Boolean(),
isRespWebDesignCertV9: Type.Boolean(),
isSciCompPyCertV7: Type.Boolean(),
+2
View File
@@ -32,8 +32,10 @@ export const createResetProperties = () => ({
isJsAlgoDataStructCert: false,
isJsAlgoDataStructCertV8: false,
isMachineLearningPyCertV7: false,
isPythonCertV9: false,
isQaCertV7: false,
isRelationalDatabaseCertV8: false,
isRelationalDatabaseCertV9: false,
isRespWebDesignCert: false,
isRespWebDesignCertV9: false,
isSciCompPyCertV7: false,