From 95b4e4b5adb199a409d29786cc4d53cbe5e0ba0c Mon Sep 17 00:00:00 2001 From: "Anjali (Jay) Jain" <116294517+JayJ104@users.noreply.github.com> Date: Mon, 20 Jan 2025 20:53:25 -0800 Subject: [PATCH] updated judge specialties in migrations & seeding (#174) --- migrations/create-users.mjs | 8 +++++++- scripts/generateData.mjs | 17 ++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/migrations/create-users.mjs b/migrations/create-users.mjs index 6481d07e..b811027a 100644 --- a/migrations/create-users.mjs +++ b/migrations/create-users.mjs @@ -1,3 +1,7 @@ +import tracks from '../app/(api)/_data/tracks.json' assert { type: 'json' }; + +const domains = [...new Set(tracks.map((track) => track.type))]; + export async function up(db) { await db.createCollection('users', { validator: { @@ -30,8 +34,10 @@ export async function up(db) { specialties: { bsonType: 'array', description: 'specialties must be an array of valid string values', + maxItems: domains.length, + minItems: domains.length, items: { - enum: ['tech', 'business', 'design'], + enum: domains, description: 'specialty must be either tech, business, or design', }, }, diff --git a/scripts/generateData.mjs b/scripts/generateData.mjs index 47b42926..d5533b4c 100644 --- a/scripts/generateData.mjs +++ b/scripts/generateData.mjs @@ -2,9 +2,20 @@ import { faker } from '@faker-js/faker'; import { ObjectId } from 'mongodb'; import tracks from '../app/(api)/_data/tracks.json' assert { type: 'json' }; +function shuffleSpecialties(specialties) { + const shuffledSpecialties = [...specialties]; + for (let i = shuffledSpecialties.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [shuffledSpecialties[i], shuffledSpecialties[j]] = [ + shuffledSpecialties[j], + shuffledSpecialties[i], + ]; + } + return shuffledSpecialties; +} + function generateData(collectionName, numDocuments) { - const specialties = ['tech', 'business', 'design']; - const numSpecialties = 2; + const specialties = [...new Set(tracks.map((track) => track.type))]; const hackerPositions = ['developer', 'designer', 'pm', 'other']; const eventTypes = ['workshop', 'meal', 'general', 'activity']; @@ -15,7 +26,7 @@ function generateData(collectionName, numDocuments) { name: faker.person.fullName(), email: faker.internet.email(), password: faker.internet.password(), - specialties: faker.helpers.arrayElements(specialties, numSpecialties), + specialties: shuffleSpecialties(specialties), role: 'judge', }));