index.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. 'use strict';
  2. const logger = require('../../logger.js');
  3. const serviceBindings = require('kube-service-bindings');
  4. const { Pool } = require('pg');
  5. let connectionOptions;
  6. try {
  7. connectionOptions = serviceBindings.getBinding('POSTGRESQL', 'pg');
  8. } catch (err) {
  9. const serviceHost = process.env.MY_DATABASE_SERVICE_HOST || process.env.POSTGRESQL_SERVICE_HOST || 'localhost';
  10. const user = process.env.DB_USERNAME || process.env.POSTGRESQL_USER || 'luke';
  11. const password = process.env.DB_PASSWORD || process.env.POSTGRESQL_PASSWORD || 'secret';
  12. const databaseName = process.env.POSTGRESQL_DATABASE || 'my_data';
  13. const connectionString = `postgresql://${user}:${password}@${serviceHost}:5432/${databaseName}`;
  14. connectionOptions = { connectionString };
  15. }
  16. const pool = new Pool(connectionOptions);
  17. async function didInitHappen () {
  18. const query = 'select * from products';
  19. try {
  20. await pool.query(query);
  21. logger.info('Database Already Created');
  22. return true;
  23. } catch (err) {
  24. return false;
  25. }
  26. }
  27. // -- Create the products table if not present
  28. const initScript = `CREATE TABLE IF NOT EXISTS products (
  29. id SERIAL PRIMARY KEY,
  30. name VARCHAR(40) NOT NULL,
  31. stock BIGINT
  32. );
  33. DELETE FROM products;
  34. INSERT INTO products (name, stock) values ('Apple', 10);
  35. INSERT INTO products (name, stock) values ('Orange', 10);
  36. INSERT INTO products (name, stock) values ('Pear', 10);`;
  37. async function query (text, parameters) {
  38. // Check that we have initialized the DB on each Query request
  39. const initHappened = await didInitHappen();
  40. if (!initHappened) {
  41. await init();
  42. }
  43. return pool.query(text, parameters);
  44. }
  45. async function init () {
  46. const initHappened = await didInitHappen();
  47. if (!initHappened) {
  48. return pool.query(initScript);
  49. }
  50. }
  51. module.exports = {
  52. query,
  53. init
  54. };