Skip to content

Instantly share code, notes, and snippets.

@174n
Last active June 18, 2019 22:06
Show Gist options
  • Save 174n/24a0671fca9b49808b30a6f59af96b88 to your computer and use it in GitHub Desktop.
Save 174n/24a0671fca9b49808b30a6f59af96b88 to your computer and use it in GitHub Desktop.
const mysql = require("mysql");
const faker = require('faker');
faker.locale = "de";
/* Generic stuff
==========================================*/
const getArray = number =>
[...new Array(number)];
const generateMultiple = (number, func) =>
getArray(number).map(() => func());
const generateMultipleWithId = (number, func) =>
getArray(number).map((v, i) => {
let obj = func();
obj.id = i;
return obj;
});
/* DB specific stuff
==========================================*/
const generateKunde = (Adresse = 0) => ({
Name: faker.name.lastName(),
Vorname: faker.name.firstName(),
Adresse
});
const generateAdresse = () => ({
PLZ: faker.address.zipCode(),
Land: faker.address.country(),
Stadt: faker.address.city(),
Strasse: faker.address.streetName(),
Hausnummer: faker.random.number({
min: 1,
max: 300
})
});
const generateProdukt = (KategorieID = 0, UnterkategorieID = 0, HerkunftID = 0) => ({
Name: faker.commerce.productName(),
Preis: faker.random.number({
min: 5,
max: 1000
}),
Model: `${generateMultiple(4, faker.random.alphaNumeric).join("")}-${faker.random.number({min: 1000,max: 9999})}-${faker.random.arrayElement(["lite", "pro", "elite", "special", "s", "remastered", "large", "air"])}`,
Farbe: Math.random() > 0.3 ? faker.commerce.color() : null,
Groesse: Math.random() > 0.6 ? faker.random.number({
min: 20,
max: 40
}) : null,
Kategorie: KategorieID,
Unterkategorie: UnterkategorieID,
Herkunft: HerkunftID
});
const generateKategorie = () => ({
Name: faker.commerce.department(),
Beschreibung: faker.lorem.paragraph()
});
const generateUnterkategorie = (KategorieID = 0) => ({
Name: faker.commerce.department(),
Beschreibung: faker.lorem.paragraph(),
Kategorie: KategorieID
});
const generateHerkunft = (AdresseID = 0) => ({
Lieferzeit: faker.random.number({min: 1, max: 14}),
Einfuhrkosten: faker.random.number({min: 500, max: 10000}),
Marke: faker.company.companyName(),
Adresse: AdresseID
});
const generateBestellung = (ProduktID = 0, KundeID = 0) => ({
Uhrzeit: faker.date.past(),
Anzahl: faker.random.arrayElement([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 4, 4, 5]),
Produkt: ProduktID,
Kunde: KundeID
});
/* Hardcoded stuff
==========================================*/
const Adresse = generateMultiple(1030, generateAdresse);
const Herkunft = getArray(30).map((_, i) => generateHerkunft(i+1));
const Kunde = getArray(1000).map((_, i) => generateKunde(i+31));
const Kategorie = generateMultiple(10, generateKategorie);
const Unterkategorie = getArray(50).map(() => generateUnterkategorie(faker.random.number({min:1, max: 10})));
const Produkt = getArray(3000).map(() => generateProdukt(
faker.random.number({min: 1, max: 10}),
faker.random.number({min: 1, max: 50}),
faker.random.number({min: 1, max: 30})
));
const Bestellung = getArray(5000).map(() => generateBestellung(
faker.random.number({min:1, max: 3000}),
faker.random.number({min:1, max: 1000})
));
/* DB connection
==========================================*/
let connection = mysql.createConnection({
host: "remotemysql.com",
user: "username",
password: "password",
database: "database"
});
const addRow = (table, content) => {
connection.query('INSERT INTO '+table+' SET ?', content, function (error, results, fields) {
if (error) throw error;
console.log(`${table} - ${results.insertId}`);
});
}
connection.connect();
let tables = {Adresse, Herkunft, Kunde, Kategorie, Unterkategorie, Produkt, Bestellung};
let tableNames = Object.keys(tables);
let tableValues = Object.values(tables);
tableValues
.forEach((table, i) => {
table.forEach(entry => {
addRow(tableNames[i], entry);
})
});
connection.end();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment