Spaces:
Running
Running
| // mongoose seeder script | |
| // takes an optional cli argument "--reset" to reset the database | |
| // | |
| // Usage: | |
| // npm run seed | |
| // npm run seed:reset | |
| // node src/seeder/seed.ts | |
| // node src/seeder/seed.ts --reset | |
| import * as glob from "glob"; | |
| import path from "path"; | |
| import { loadExercisesDataset } from "./helpers/load-exercises-dataset"; | |
| import { dbStore } from "./helpers/db-store"; | |
| import { loadMealsDataset } from "./helpers/load-meals-dataset"; | |
| const loadDatasets = async () => { | |
| const exercisesDataset = await loadExercisesDataset(); | |
| const mealsDataset = loadMealsDataset(); | |
| let musclesDataset = exercisesDataset.map((exercise) => ({ name: exercise.target, image: exercise.target_url })); | |
| musclesDataset = musclesDataset.filter((value, index, self) => | |
| index === self.findIndex((t) => ( | |
| t.name === value.name | |
| )) | |
| ) | |
| let equipmentsDataset = exercisesDataset.map((exercise) => ({ name: exercise.equipment, image: exercise.equipment_url })); | |
| equipmentsDataset = equipmentsDataset.filter((value, index, self) => | |
| index === self.findIndex((t) => ( | |
| t.name === value.name | |
| )) | |
| ) | |
| const ingredientsArrays = mealsDataset.map(m => m.RecipeIngredientParts); | |
| const ingredientsNames = Array.from(new Set(ingredientsArrays.flat())) | |
| dbStore.excerisesDataset = exercisesDataset; | |
| dbStore.musclesDataset = musclesDataset; | |
| dbStore.equipmentsDataset = equipmentsDataset; | |
| dbStore.mealsDataset = mealsDataset; | |
| dbStore.ingredientsNames = ingredientsNames; | |
| } | |
| const main = async () => { | |
| // get cli arguments | |
| const args = process.argv.slice(2); | |
| // get cli names that don't start with "--" | |
| const seederNames = args.filter((arg) => !arg.startsWith("--")); | |
| // list all files under ./seeders | |
| const seedersPath = path | |
| .relative(process.cwd(), path.join(__dirname, "**/*.seeder.{ts,js}")) | |
| .replace(/\\/g, "/"); | |
| const seedersFiles = glob | |
| .sync(seedersPath, {}) | |
| .map((file) => { | |
| return path.resolve(file); | |
| }) | |
| .filter((file) => { | |
| if (seederNames.length === 0) { | |
| return true; | |
| } | |
| return seederNames.some(name => path.basename(file).includes(name)); | |
| }) | |
| .sort(); | |
| console.log(seedersFiles); | |
| // load datasets | |
| await loadDatasets(); | |
| // run all seeders | |
| let count = 0; | |
| for await (const file of seedersFiles) { | |
| const baseName = path.basename(file); | |
| console.log(`Running ${baseName} ...`); | |
| const seeder = await import(file); | |
| await seeder.default(); | |
| console.log(`${baseName} completed! (${++count}/${seedersFiles.length})`); | |
| } | |
| console.log("All seeders completed!"); | |
| process.exit(0); | |
| }; | |
| main().catch((err) => { | |
| console.error(err); | |
| process.exit(1); | |
| }); | |