2018-10-06 02:25:11 +01:00
|
|
|
const path = require('path');
|
2018-10-07 08:51:58 +01:00
|
|
|
const fs = require('fs');
|
2018-10-06 02:25:11 +01:00
|
|
|
require('dotenv').config({ path: path.resolve(__dirname, '../.env') });
|
|
|
|
const MongoClient = require('mongodb').MongoClient;
|
|
|
|
const { getChallengesForLang } = require('@freecodecamp/curriculum');
|
|
|
|
const { flatten } = require('lodash');
|
2018-10-07 08:51:58 +01:00
|
|
|
const debug = require('debug');
|
2018-10-06 02:25:11 +01:00
|
|
|
|
2018-10-07 08:51:58 +01:00
|
|
|
const { createPathMigrationMap } = require('./createPathMigrationMap');
|
|
|
|
|
|
|
|
const log = debug('fcc:tools:seedChallenges');
|
2018-10-06 02:25:11 +01:00
|
|
|
const { MONGOHQ_URL, LOCALE: lang } = process.env;
|
|
|
|
|
|
|
|
function handleError(err, client) {
|
|
|
|
if (err) {
|
|
|
|
console.error('Oh noes!!');
|
|
|
|
console.error(err);
|
|
|
|
try {
|
|
|
|
client.close();
|
|
|
|
} catch (e) {
|
|
|
|
// no-op
|
|
|
|
} finally {
|
|
|
|
/* eslint-disable-next-line no-process-exit */
|
|
|
|
process.exit(1);
|
2015-08-10 12:14:38 -07:00
|
|
|
}
|
2018-10-06 02:25:11 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
MongoClient.connect(
|
|
|
|
MONGOHQ_URL,
|
|
|
|
{ useNewUrlParser: true },
|
|
|
|
function(err, client) {
|
|
|
|
handleError(err, client);
|
|
|
|
|
2018-10-07 08:51:58 +01:00
|
|
|
log('Connected successfully to mongo');
|
2018-10-06 02:25:11 +01:00
|
|
|
|
|
|
|
const db = client.db('freecodecamp');
|
|
|
|
const challenges = db.collection('challenges');
|
|
|
|
|
|
|
|
challenges.deleteMany({}, err => {
|
|
|
|
handleError(err, client);
|
|
|
|
|
|
|
|
const curriculum = getChallengesForLang(lang);
|
|
|
|
|
|
|
|
const allChallenges = Object.keys(curriculum)
|
|
|
|
.map(key => curriculum[key].blocks)
|
|
|
|
.reduce((challengeArray, superBlock) => {
|
|
|
|
const challengesForBlock = Object.keys(superBlock).map(
|
|
|
|
key => superBlock[key].challenges
|
|
|
|
);
|
|
|
|
return [...challengeArray, ...flatten(challengesForBlock)];
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
try {
|
|
|
|
challenges.insertMany(allChallenges, { ordered: false });
|
|
|
|
} catch (e) {
|
|
|
|
handleError(e, client);
|
|
|
|
} finally {
|
2018-10-07 08:51:58 +01:00
|
|
|
log('challenge seed complete');
|
2018-10-06 02:25:11 +01:00
|
|
|
client.close();
|
2018-10-07 08:51:58 +01:00
|
|
|
log('generating path migration map');
|
|
|
|
const pathMap = createPathMigrationMap(curriculum);
|
|
|
|
const outputDir = path.resolve(
|
|
|
|
__dirname,
|
|
|
|
'../../../api-server/server/resources/pathMigration.json'
|
|
|
|
);
|
|
|
|
fs.writeFile(outputDir, JSON.stringify(pathMap), err => {
|
|
|
|
if (err) {
|
|
|
|
console.error('Oh noes!!');
|
|
|
|
console.error(err);
|
|
|
|
}
|
|
|
|
log('path migration map generated');
|
|
|
|
});
|
2018-10-06 02:25:11 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
);
|