import mongoose from 'mongoose'; import bluebird from 'bluebird'; import _ from 'lodash'; import { User, Poll, Vote } from 'which-types'; import app from './app'; mongoose.connect('mongodb://localhost:27017/which', { useNewUrlParser: true }); const POLLS_AMOUNT = 20; const imageUrls: string[] = [ // eslint-disable max-len 'https://cdn.psychologytoday.com/sites/default/files/field_blog_entry_images/2019-06/pexels-photo-556667.jpeg', 'https://images.pexels.com/photos/556666/pexels-photo-556666.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500', 'https://i.pinimg.com/originals/50/91/3e/50913eeb04768a5b1fa9985c16704d96.jpg', 'https://grazia.wwmindia.com/photogallery/2017/apr/1_1491461089.jpg' ]; const names: string[] = [ 'Emma', 'Elise', 'Jack', 'Oliver', 'Jamie', 'Adam', 'Jordan', 'William' ]; const choices = [ 'left', 'right' ]; const createPoll = (authorId: string): Promise => { const generateImageData = () => ({ url: _.sample(imageUrls) || '' }); return app.service('polls').create({ contents: { left: generateImageData(), right: generateImageData() }, authorId }); }; const createUser = (username: string): Promise => { return app.service('users').create({ avatarUrl: _.sample(imageUrls) || '', password: 'supersecret', username }); }; const createVote = (userId: string, pollId: string): Promise => { return app.service('votes').create({ pollId, which: _.sample(choices) }, { user: { _id: userId } }); }; const populate = async () => { const users = await bluebird.map(names, name => createUser(name)); const polls = await bluebird.mapSeries(new Array(POLLS_AMOUNT), async () => { const user = _.sample(users); return createPoll(user?._id || ''); }); await bluebird.map(users, user => { const pollsToVote = _.sampleSize(polls, _.random(0, POLLS_AMOUNT)); return bluebird.map(pollsToVote, poll => createVote(user?._id || '', poll?._id || '')); }); }; populate().finally(mongoose.disconnect);