const bcrypt = require("bcryptjs"); export const createUsers = async (queryInterface, roles, users) => { // Create Authentications await queryInterface.bulkInsert('Authentications', users.map((player) => { return { email: player.email, password: bcrypt.hashSync(player.password, 8), createdAt: new Date(), updatedAt: new Date() } })); const auths = await queryInterface.select(null, 'Authentications'); // Create Users await queryInterface.bulkInsert('Users', users.map(player => { const auth = auths.find(auth => auth.email === player.email); return { firstName: player.firstName, lastName: player.lastName, dateOfBirth: player.dateOfBirth, authId: auth ? auth.id : null, createdAt: new Date(), updatedAt: new Date() }; })); const createdUsers = await queryInterface.select(null, 'Users'); const userRoles = createdUsers.flatMap(user => user.roles.map(role => ({ id: user.id, role: role }))); const rolesByName = roles.reduce((map, role) => { map[role.name] = role; return map; }) // Create UserRoles await queryInterface.bulkInsert('UserRoles', userRoles.map(userRole => { return { userId: userRole.id, roleId: rolesByName[userRole.role].id, createdAt: new Date(), updatedAt: new Date() }; })); return createdUsers; } export const createPlayer = async (queryInterface, roles, players) => { const users = await createUsers(queryInterface, roles, players); // Create Players await queryInterface.bulkInsert('Players', players.map(player => { const user = users.find(user => user.firstName === player.firstName && user.lastName === player.lastName); return { height: player.height ? player.height : null, weight: player.weight ? player.weight : null, gender: player.gender, bats: player.bats, throws: player.throws, state: player.state, userId: user ? user.id : null, createdAt: new Date(), updatedAt: new Date() }; })); }