bullpen/backend/helper/seeder.helper.js

85 lines
2.6 KiB
JavaScript

const bcrypt = require("bcryptjs");
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 rolesByName = roles.reduce((map, role) => {
map[role.name] = role;
return map;
}, {});
const createdUsers = await queryInterface.select(null, 'Users');
const userRoles = users.flatMap(user => {
return user.roles.map(role => ({
id: createdUsers.find(createdUser => createdUser.firstName === user.firstName && createdUser.lastName === user.lastName).id,
role: rolesByName[role]
}));
});
// Create UserRoles
await queryInterface.bulkInsert('UserRoles', userRoles.map(userRole => {
return {
userId: userRole.id,
roleId: userRole.role.id,
createdAt: new Date(),
updatedAt: new Date()
};
}));
return createdUsers;
}
const createPlayer = async (queryInterface, roles, players) => {
const users = await createUsers(queryInterface, roles, players.map(player => ({
...player,
roles: player.roles || ['player']
})));
// 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,
jerseyNumber: player.jerseyNumber,
userId: user ? user.id : null,
createdAt: new Date(),
updatedAt: new Date()
};
}));
}
module.exports = {
createPlayer,
createUsers
}