in SRE - Operating applications and infrastructure in the cloud/SRE40/setup/src/product-service/scripts/genProducts.js [40:128]
async function insert() {
const csvData = await rf(path.resolve(__dirname, "./images.csv"));
const images = await parse(csvData, {
columns: true,
cast: true
});
let items = [];
if (process.env.PG_CONNECTION_STRING) {
console.log("PG connection string detected, reading from Postgres");
const pg = new PgClient({
connectionString: process.env.PG_CONNECTION_STRING,
ssl: true
});
pg.connect();
const existing = await pg.query(`
SELECT
products.id,
products.name,
products.sku,
products.price,
products.short_description,
products.long_description,
products.digital,
products.unit_description,
products.dimensions,
products.weight_in_pounds,
products.reorder_amount,
products.status,
products.location,
suppliers.name as supplier_name,
product_types.name as product_type
FROM products, suppliers, product_types
WHERE
suppliers.id = products.supplier_id
AND
product_types.id = products.product_type_id;
`);
items = existing.rows;
items = items.map(item =>
Object.keys(item).reduce(
(acc, key) => {
acc[toCamelCase(key)] = item[key];
return acc;
},
{ images: getRandomImagesArray(images) }
)
);
await pg.end();
} else {
console.log("PG connection string not detected, skipping Postgres");
}
console.log(
`received ${items.length} from Postgres, filling in ${numberOfItems -
items.length} items with randomly generated data`
);
items = items.concat(
dataMaker(items.length + 1, numberOfItems).map(obj => {
obj.images = getRandomImagesArray(images);
return obj;
})
);
console.log("starting MongoDB");
console.log(
`local: ${url ===
"mongodb://localhost:27017"} | db: ${dbName} | collection: ${collectionName} | number of items: ${numberOfItems}`
);
const client = await MongoClient.connect(
url,
{ useNewUrlParser: true }
);
const db = client.db(dbName);
const res = await db.collection(collectionName).insertMany(items);
console.log(`finished insert, inserted ${res.insertedCount} items`);
await client.close();
console.log(`closed connection, finished`);
}