const { fakerLV : faker } = require('@faker-js/faker'); const { randomUUID } = require('crypto'); const USER_COUNT = 500; /** * @param { import("knex").Knex } knex * @returns { Promise } */ exports.seed = async function(knex) { const places = await knex('places').select('id'); const createUser = ({ sex = faker.person.sexType(), first_name = `${faker.person.firstName(sex)}`, last_name = faker.person.lastName(sex), email = faker.internet.email({ lastName: last_name, firstName: first_name }).toLocaleLowerCase(), } = {}) => { return { id: randomUUID(), first_name, last_name, email, } }; const users = [ createUser({ first_name: 'Broks Randolfs', last_name: 'Gailītis', email: 'broks.randolfs@gailitis.dev' }), createUser({ first_name: 'Ieva', last_name: 'Gailīte' }), ...new Array(USER_COUNT).fill(() => createUser()).map((fn, i) => fn(i)), ]; await knex('users').insert(users); // Generate multiple random place ratings for each user for (const user of users) { const placeIds = faker.helpers.arrayElements(places, { min: 1, max: 10 }); for (const placeId of placeIds) { await knex('place_ratings').insert({ id: randomUUID(), user_id: user.id, place_id: placeId.id, rating: faker.number.int({ min: 1, max: 5 }), }); } } };