Skip to content

Commit 58db4b7

Browse files
Merge pull request #733 from freeCodeCamp/main
Create a new pull request by comparing changes across two branches
2 parents f8b0eee + 14932a9 commit 58db4b7

File tree

228 files changed

+11537
-1141
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

228 files changed

+11537
-1141
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ pnpm-lock.yaml
3636

3737
/curriculum/challenges/_meta/* @freecodecamp/curriculum
3838
/curriculum/challenges/english/* @freecodecamp/curriculum
39+
/client/i18n/locales/english/* @freecodecamp/curriculum
3940

4041
# -------------------------------------------------
4142
# Files that need attention from i18n & dev team

api/prisma/schema.prisma

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,10 @@ model user {
124124
isJsAlgoDataStructCert Boolean? // Undefined
125125
isJsAlgoDataStructCertV8 Boolean? // Undefined
126126
isMachineLearningPyCertV7 Boolean? // Undefined
127+
isPythonCertV9 Boolean? // Undefined
127128
isQaCertV7 Boolean? // Undefined
128129
isRelationalDatabaseCertV8 Boolean? // Undefined
130+
isRelationalDatabaseCertV9 Boolean? // Undefined
129131
isRespWebDesignCert Boolean? // Undefined
130132
isRespWebDesignCertV9 Boolean? // Undefined
131133
isSciCompPyCertV7 Boolean? // Undefined

api/src/plugins/__fixtures__/user.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@ export const newUser = (email: string) => ({
4848
isJsAlgoDataStructCert: false,
4949
isJsAlgoDataStructCertV8: false,
5050
isMachineLearningPyCertV7: false,
51+
isPythonCertV9: false,
5152
isQaCertV7: false,
5253
isRelationalDatabaseCertV8: false,
54+
isRelationalDatabaseCertV9: false,
5355
isCollegeAlgebraPyCertV8: false,
5456
isRespWebDesignCert: false,
5557
isRespWebDesignCertV9: false,

api/src/routes/helpers/user-utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ const nullableFlags = [
2626
'isJsAlgoDataStructCert',
2727
'isJsAlgoDataStructCertV8',
2828
'isMachineLearningPyCertV7',
29+
'isPythonCertV9',
2930
'isQaCertV7',
3031
'isRelationalDatabaseCertV8',
32+
'isRelationalDatabaseCertV9',
3133
'isRespWebDesignCert',
3234
'isRespWebDesignCertV9',
3335
'isSciCompPyCertV7',

api/src/routes/protected/certificate.test.ts

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,25 @@ describe('certificate routes', () => {
3939
where: { email: defaultUserEmail },
4040
data: {
4141
completedChallenges: [],
42-
name: 'fcc',
43-
isA2EnglishCert: false,
44-
isRespWebDesignCert: false,
45-
isJsAlgoDataStructCert: false,
46-
isFrontEndLibsCert: false,
4742
is2018DataVisCert: false,
48-
isRelationalDatabaseCertV8: false,
43+
isA2EnglishCert: false,
4944
isApisMicroservicesCert: false,
50-
isQaCertV7: false,
51-
isSciCompPyCertV7: false,
52-
isDataAnalysisPyCertV7: false,
53-
isInfosecCertV7: false,
54-
isMachineLearningPyCertV7: false,
5545
isCollegeAlgebraPyCertV8: false,
46+
isDataAnalysisPyCertV7: false,
5647
isFoundationalCSharpCertV8: false,
48+
isFrontEndLibsCert: false,
49+
isInfosecCertV7: false,
50+
isJsAlgoDataStructCert: false,
5751
isJavascriptCertV9: false,
52+
isMachineLearningPyCertV7: false,
53+
isPythonCertV9: false,
54+
isQaCertV7: false,
55+
isRelationalDatabaseCertV8: false,
56+
isRelationalDatabaseCertV9: false,
57+
isRespWebDesignCert: false,
5858
isRespWebDesignCertV9: false,
59+
isSciCompPyCertV7: false,
60+
name: 'fcc',
5961
username: 'fcc'
6062
}
6163
});
@@ -154,8 +156,10 @@ describe('certificate routes', () => {
154156
isInfosecQaCert: false,
155157
isJsAlgoDataStructCert: false,
156158
isMachineLearningPyCertV7: false,
159+
isPythonCertV9: false,
157160
isQaCertV7: false,
158161
isRelationalDatabaseCertV8: false,
162+
isRelationalDatabaseCertV9: false,
159163
isRespWebDesignCert: false,
160164
isSciCompPyCertV7: false,
161165
isJavascriptCertV9: false,
@@ -234,22 +238,24 @@ describe('certificate routes', () => {
234238
{ id: '587d78b0367417b2b2512b05', completedDate: 123456789 },
235239
{ id: 'bd7158d8c242eddfaeb5bd13', completedDate: 123456789 }
236240
],
237-
isRespWebDesignCert: false,
238-
isJsAlgoDataStructCertV8: true,
239-
isFrontEndLibsCert: true,
240241
is2018DataVisCert: true,
241-
isRelationalDatabaseCertV8: true,
242+
isA2EnglishCert: true,
242243
isApisMicroservicesCert: true,
243-
isQaCertV7: true,
244-
isSciCompPyCertV7: true,
245-
isDataAnalysisPyCertV7: true,
246-
isInfosecCertV7: true,
247-
isMachineLearningPyCertV7: true,
248244
isCollegeAlgebraPyCertV8: true,
245+
isDataAnalysisPyCertV7: true,
249246
isFoundationalCSharpCertV8: true,
247+
isFrontEndLibsCert: true,
248+
isInfosecCertV7: true,
250249
isJavascriptCertV9: true,
250+
isJsAlgoDataStructCertV8: true,
251+
isMachineLearningPyCertV7: true,
252+
isPythonCertV9: true,
253+
isQaCertV7: true,
254+
isRelationalDatabaseCertV8: true,
255+
isRelationalDatabaseCertV9: true,
256+
isRespWebDesignCert: false,
251257
isRespWebDesignCertV9: true,
252-
isA2EnglishCert: true
258+
isSciCompPyCertV7: true
253259
}
254260
});
255261

@@ -323,7 +329,9 @@ describe('certificate routes', () => {
323329
isMachineLearningPyCertV7: false,
324330
isRelationalDatabaseCertV8: false,
325331
isCollegeAlgebraPyCertV8: false,
326-
isFoundationalCSharpCertV8: false
332+
isFoundationalCSharpCertV8: false,
333+
isPythonCertV9: false,
334+
isRelationalDatabaseCertV9: false
327335
},
328336
completedChallenges: [
329337
{

api/src/routes/protected/certificate.ts

Lines changed: 58 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -123,78 +123,84 @@ export function createCertLookup(
123123

124124
interface CertI {
125125
isA2EnglishCert?: boolean;
126-
isRespWebDesignCert?: boolean;
127-
isJsAlgoDataStructCert?: boolean;
128-
isJsAlgoDataStructCertV8?: boolean;
129-
isFrontEndLibsCert?: boolean;
130-
is2018DataVisCert?: boolean;
131126
isApisMicroservicesCert?: boolean;
132-
isInfosecQaCert?: boolean;
133-
isQaCertV7?: boolean;
134-
isInfosecCertV7?: boolean;
135-
isFrontEndCert?: boolean;
136127
isBackEndCert?: boolean;
128+
isCollegeAlgebraPyCertV8?: boolean;
129+
isDataAnalysisPyCertV7?: boolean;
137130
isDataVisCert?: boolean;
131+
isFrontEndCert?: boolean;
132+
isFrontEndLibsCert?: boolean;
133+
isFoundationalCSharpCertV8?: boolean;
138134
isFullStackCert?: boolean;
139-
isSciCompPyCertV7?: boolean;
140-
isDataAnalysisPyCertV7?: boolean;
135+
isInfosecCertV7?: boolean;
136+
isInfosecQaCert?: boolean;
137+
isJavascriptCertV9?: boolean;
138+
isJsAlgoDataStructCert?: boolean;
139+
isJsAlgoDataStructCertV8?: boolean;
141140
isMachineLearningPyCertV7?: boolean;
141+
isPythonCertV9?: boolean;
142+
isQaCertV7?: boolean;
142143
isRelationalDatabaseCertV8?: boolean;
143-
isCollegeAlgebraPyCertV8?: boolean;
144-
isFoundationalCSharpCertV8?: boolean;
145-
isJavascriptCertV9?: boolean;
144+
isRelationalDatabaseCertV9?: boolean;
145+
isRespWebDesignCert?: boolean;
146146
isRespWebDesignCertV9?: boolean;
147+
isSciCompPyCertV7?: boolean;
148+
is2018DataVisCert?: boolean;
147149
}
148150

149151
function getUserIsCertMap(user: CertI) {
150152
const {
151153
isA2EnglishCert = false,
152-
isRespWebDesignCert = false,
153-
isJsAlgoDataStructCert = false,
154-
isJsAlgoDataStructCertV8 = false,
155-
isFrontEndLibsCert = false,
156-
is2018DataVisCert = false,
157154
isApisMicroservicesCert = false,
158-
isInfosecQaCert = false,
159-
isQaCertV7 = false,
160-
isInfosecCertV7 = false,
161-
isFrontEndCert = false,
162155
isBackEndCert = false,
156+
isCollegeAlgebraPyCertV8 = false,
157+
isDataAnalysisPyCertV7 = false,
163158
isDataVisCert = false,
159+
isFrontEndCert = false,
160+
isFrontEndLibsCert = false,
161+
isFoundationalCSharpCertV8 = false,
164162
isFullStackCert = false,
165-
isSciCompPyCertV7 = false,
166-
isDataAnalysisPyCertV7 = false,
163+
isInfosecCertV7 = false,
164+
isInfosecQaCert = false,
165+
isJavascriptCertV9 = false,
166+
isJsAlgoDataStructCert = false,
167+
isJsAlgoDataStructCertV8 = false,
167168
isMachineLearningPyCertV7 = false,
169+
isPythonCertV9 = false,
170+
isQaCertV7 = false,
168171
isRelationalDatabaseCertV8 = false,
169-
isCollegeAlgebraPyCertV8 = false,
170-
isFoundationalCSharpCertV8 = false,
171-
isJavascriptCertV9 = false,
172-
isRespWebDesignCertV9 = false
172+
isRelationalDatabaseCertV9 = false,
173+
isRespWebDesignCert = false,
174+
isRespWebDesignCertV9 = false,
175+
isSciCompPyCertV7 = false,
176+
is2018DataVisCert = false
173177
} = user;
174178

175179
return {
176180
isA2EnglishCert,
177-
isRespWebDesignCert,
178-
isJsAlgoDataStructCert,
179-
isJsAlgoDataStructCertV8,
180-
isFrontEndLibsCert,
181-
is2018DataVisCert,
182181
isApisMicroservicesCert,
183-
isInfosecQaCert,
184-
isQaCertV7,
185-
isInfosecCertV7,
186-
isFrontEndCert,
187182
isBackEndCert,
183+
isCollegeAlgebraPyCertV8,
184+
isDataAnalysisPyCertV7,
188185
isDataVisCert,
186+
isFrontEndCert,
187+
isFrontEndLibsCert,
188+
isFoundationalCSharpCertV8,
189189
isFullStackCert,
190-
isSciCompPyCertV7,
191-
isDataAnalysisPyCertV7,
190+
isInfosecCertV7,
191+
isInfosecQaCert,
192+
isJavascriptCertV9,
193+
isJsAlgoDataStructCert,
194+
isJsAlgoDataStructCertV8,
192195
isMachineLearningPyCertV7,
196+
isPythonCertV9,
197+
isQaCertV7,
193198
isRelationalDatabaseCertV8,
194-
isCollegeAlgebraPyCertV8,
195-
isFoundationalCSharpCertV8,
196-
isJavascriptCertV9,
197-
isRespWebDesignCertV9
199+
isRelationalDatabaseCertV9,
200+
isRespWebDesignCert,
201+
isRespWebDesignCertV9,
202+
isSciCompPyCertV7,
203+
is2018DataVisCert
198204
};
199205
}
200206

@@ -335,33 +341,35 @@ export const protectedCertificateRoutes: FastifyPluginCallbackTypebox = (
335341
}
336342
},
337343
select: {
338-
username: true,
344+
completedChallenges: true,
339345
email: true,
340346
name: true,
341-
completedChallenges: true,
347+
username: true,
342348
is2018DataVisCert: true,
343349
is2018FullStackCert: true,
344350
isA2EnglishCert: true,
345351
isApisMicroservicesCert: true,
346352
isBackEndCert: true,
347-
isDataVisCert: true,
348353
isCollegeAlgebraPyCertV8: true,
349354
isDataAnalysisPyCertV7: true,
355+
isDataVisCert: true,
350356
isFoundationalCSharpCertV8: true,
351357
isFrontEndCert: true,
352358
isFrontEndLibsCert: true,
353359
isFullStackCert: true,
354360
isInfosecCertV7: true,
355361
isInfosecQaCert: true,
362+
isJavascriptCertV9: true,
356363
isJsAlgoDataStructCert: true,
357364
isJsAlgoDataStructCertV8: true,
358365
isMachineLearningPyCertV7: true,
366+
isPythonCertV9: true,
359367
isQaCertV7: true,
360368
isRelationalDatabaseCertV8: true,
369+
isRelationalDatabaseCertV9: true,
361370
isRespWebDesignCert: true,
362-
isSciCompPyCertV7: true,
363-
isJavascriptCertV9: true,
364-
isRespWebDesignCertV9: true
371+
isRespWebDesignCertV9: true,
372+
isSciCompPyCertV7: true
365373
}
366374
});
367375

api/src/routes/protected/user.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,10 @@ const publicUserData = {
293293
isJsAlgoDataStructCert: testUserData.isJsAlgoDataStructCert,
294294
isJsAlgoDataStructCertV8: testUserData.isJsAlgoDataStructCertV8,
295295
isMachineLearningPyCertV7: testUserData.isMachineLearningPyCertV7,
296+
isPythonCertV9: testUserData.isPythonCertV9,
296297
isQaCertV7: testUserData.isQaCertV7,
297298
isRelationalDatabaseCertV8: testUserData.isRelationalDatabaseCertV8,
299+
isRelationalDatabaseCertV9: testUserData.isRelationalDatabaseCertV9,
298300
isRespWebDesignCert: testUserData.isRespWebDesignCert,
299301
isRespWebDesignCertV9: testUserData.isRespWebDesignCertV9,
300302
isSciCompPyCertV7: testUserData.isSciCompPyCertV7,
@@ -345,7 +347,9 @@ const baseProgressData = {
345347
isSciCompPyCertV7: false,
346348
isDataAnalysisPyCertV7: false,
347349
isMachineLearningPyCertV7: false,
350+
isPythonCertV9: false,
348351
isRelationalDatabaseCertV8: false,
352+
isRelationalDatabaseCertV9: false,
349353
isRespWebDesignCertV9: false,
350354
isCollegeAlgebraPyCertV8: false,
351355
completedChallenges: [],
@@ -1018,8 +1022,10 @@ describe('userRoutes', () => {
10181022
isJsAlgoDataStructCert: false,
10191023
isJsAlgoDataStructCertV8: false,
10201024
isMachineLearningPyCertV7: false,
1025+
isPythonCertV9: false,
10211026
isQaCertV7: false,
10221027
isRelationalDatabaseCertV8: false,
1028+
isRelationalDatabaseCertV9: false,
10231029
isRespWebDesignCert: false,
10241030
isRespWebDesignCertV9: false,
10251031
isSciCompPyCertV7: false,

api/src/routes/protected/user.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,8 +701,10 @@ export const userGetRoutes: FastifyPluginCallbackTypebox = (
701701
isJsAlgoDataStructCert: true,
702702
isJsAlgoDataStructCertV8: true,
703703
isMachineLearningPyCertV7: true,
704+
isPythonCertV9: true,
704705
isQaCertV7: true,
705706
isRelationalDatabaseCertV8: true,
707+
isRelationalDatabaseCertV9: true,
706708
isRespWebDesignCert: true,
707709
isRespWebDesignCertV9: true,
708710
isSciCompPyCertV7: true,

api/src/routes/public/certificate.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,14 @@ export const unprotectedCertificateRoutes: FastifyPluginCallbackTypebox = (
7474
is2018DataVisCert: true,
7575
isApisMicroservicesCert: true,
7676
isInfosecQaCert: true,
77+
isPythonCertV9: true,
7778
isQaCertV7: true,
7879
isInfosecCertV7: true,
7980
isSciCompPyCertV7: true,
8081
isDataAnalysisPyCertV7: true,
8182
isMachineLearningPyCertV7: true,
8283
isRelationalDatabaseCertV8: true,
84+
isRelationalDatabaseCertV9: true,
8385
isCollegeAlgebraPyCertV8: true,
8486
isFoundationalCSharpCertV8: true,
8587
isHonest: true,

api/src/routes/public/user.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,10 @@ const publicUserData = {
206206
isJsAlgoDataStructCert: testUserData.isJsAlgoDataStructCert,
207207
isJsAlgoDataStructCertV8: testUserData.isJsAlgoDataStructCertV8,
208208
isMachineLearningPyCertV7: testUserData.isMachineLearningPyCertV7,
209+
isPythonCertV9: testUserData.isPythonCertV9,
209210
isQaCertV7: testUserData.isQaCertV7,
210211
isRelationalDatabaseCertV8: testUserData.isRelationalDatabaseCertV8,
212+
isRelationalDatabaseCertV9: testUserData.isRelationalDatabaseCertV9,
211213
isRespWebDesignCert: testUserData.isRespWebDesignCert,
212214
isRespWebDesignCertV9: testUserData.isRespWebDesignCertV9,
213215
isSciCompPyCertV7: testUserData.isSciCompPyCertV7,

0 commit comments

Comments
 (0)