From a5eb644a6c8f7a55e2a4a1f1d581a88825401bbd Mon Sep 17 00:00:00 2001
From: ManifoldFR <wilson.jallet@gmail.com>
Date: Sun, 25 Feb 2018 01:05:20 +0100
Subject: [PATCH] Setup knex.js
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Première migration sur la table 'groups' + seed
---
 .eslintignore                              |   2 +
 .eslintrc.json                             |  24 +---
 .gitignore                                 |   4 +-
 README.md                                  |   4 +-
 dist/bundle.js                             | 131 ---------------------
 knex_router.js                             |   5 +
 knexfile.js                                |   9 +-
 migrations/20180225001319_create_groups.js |  17 +++
 package-lock.json                          |   6 +-
 package.json                               |  10 +-
 seeds/01_create_groups.js                  |  29 +++++
 src/index.js                               |  19 ++-
 src/server.js                              |  16 +--
 webpack.config.js                          |  10 +-
 14 files changed, 103 insertions(+), 183 deletions(-)
 create mode 100644 .eslintignore
 delete mode 100644 dist/bundle.js
 create mode 100644 knex_router.js
 create mode 100644 migrations/20180225001319_create_groups.js
 create mode 100644 seeds/01_create_groups.js

diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..126664b
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,2 @@
+migrations/
+seeds/
\ No newline at end of file
diff --git a/.eslintrc.json b/.eslintrc.json
index 4181705..4a15836 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -8,25 +8,9 @@
         "sourceType": "module"
     },
     "rules": {
-        "indent": [
-            "error",
-            4
-        ],
-        "linebreak-style": [
-            "error",
-            "unix"
-        ],
-        "quotes": [
-            1,
-            "single"
-        ],
-        "semi": [
-            "error",
-            "never"
-        ],
-        "no-console": [
-            0,
-            "never"
-        ]
+        "indent": ["error",4],
+        "linebreak-style": ["error","unix"],
+        "semi": ["error","always"],
+        "no-console": 0
     }
 }
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 458bf37..9b5dfd3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,4 +61,6 @@ typings/
 .next
 
 # VS Code config files
-.vscode/
\ No newline at end of file
+.vscode/
+
+build/
\ No newline at end of file
diff --git a/README.md b/README.md
index 1deb222..422034d 100644
--- a/README.md
+++ b/README.md
@@ -46,11 +46,11 @@ Donc, combiner `npm run watch` et `npm test` permet de recompiler le serveur __e
 
 ## ESLint
 
-On utilisera ESLint pour standardiser le code : un ensemble de règles de style pour le code sont appliquées, et quelques-unes d'entre elles sont dans le fichier `.eslintrc.json`. Pour l'instant, la config ESLint impose d'utiliser quatre espaces pour les indentations et de ne pas utiliser de point-virgule en fin de ligne.
+On utilisera ESLint pour standardiser le code : un ensemble de règles de style pour le code sont appliquées, et quelques-unes d'entre elles sont dans le fichier `.eslintrc.json`. Pour l'instant, la config ESLint impose d'utiliser quatre espaces pour les indentations et d'utiliser des points-virgule en fin de ligne.
 
 Pour faire valider un fichier `file.js` par ESLint, utilisez
 
-    npm run eslint file.js
+    npm run lint file.js
 
 et avec l'option `--fix` pour corriger le fichier.
 
diff --git a/dist/bundle.js b/dist/bundle.js
deleted file mode 100644
index 59b8ead..0000000
--- a/dist/bundle.js
+++ /dev/null
@@ -1,131 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, {
-/******/ 				configurable: false,
-/******/ 				enumerable: true,
-/******/ 				get: getter
-/******/ 			});
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__server__ = __webpack_require__(1);
-
-
-__WEBPACK_IMPORTED_MODULE_0__server__["a" /* default */].get('/', function(req, res) {
-    console.log('Connectting to '+req.url)
-    res.send('<h1>Hello, world</h1>\nHello, world ! This is server talking to you live from Omaha on port '+port+' !')
-})
-
-// define port server is to listen on
-const port = process.env.PORT || 8888
-
-__WEBPACK_IMPORTED_MODULE_0__server__["a" /* default */].listen(port, () => console.log('Express server running on port '+port))
-
-/***/ }),
-/* 1 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_express__ = __webpack_require__(2);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_express___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_express__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_body_parser__ = __webpack_require__(3);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_body_parser___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_body_parser__);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_morgan__ = __webpack_require__(4);
-/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_morgan___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_morgan__);
-
-
-
-
-let server = __WEBPACK_IMPORTED_MODULE_0_express___default()()
-
-server.use(__WEBPACK_IMPORTED_MODULE_1_body_parser___default.a.json())
-server.use(__WEBPACK_IMPORTED_MODULE_1_body_parser___default.a.urlencoded({
-    extended: false
-}))
-
-server.use(__WEBPACK_IMPORTED_MODULE_2_morgan___default()('dev'))
-
-/* harmony default export */ __webpack_exports__["a"] = (server);
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports) {
-
-module.exports = require("express");
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
-module.exports = require("body-parser");
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports) {
-
-module.exports = require("morgan");
-
-/***/ })
-/******/ ]);
\ No newline at end of file
diff --git a/knex_router.js b/knex_router.js
new file mode 100644
index 0000000..0b63365
--- /dev/null
+++ b/knex_router.js
@@ -0,0 +1,5 @@
+const environment = process.env.NODE_ENV || 'development';
+const config = require('./knexfile')[environment];
+console.log(config);
+
+module.exports = require('knex')(config);
\ No newline at end of file
diff --git a/knexfile.js b/knexfile.js
index ce86cf7..cc65ddc 100644
--- a/knexfile.js
+++ b/knexfile.js
@@ -4,7 +4,12 @@ module.exports = {
 
     development: {
         client: 'postgresql',
-        connection: 'postgres://localhost/sigma_dev',
+        connection: {
+            host: 'localhost',
+            user: 'will',
+            password: 'password',
+            database: 'sigma_dev'
+        },
         pool: {
             min: 2,
             max: 10
@@ -14,4 +19,4 @@ module.exports = {
         }
     }
 
-}
+};
diff --git a/migrations/20180225001319_create_groups.js b/migrations/20180225001319_create_groups.js
new file mode 100644
index 0000000..0bac711
--- /dev/null
+++ b/migrations/20180225001319_create_groups.js
@@ -0,0 +1,17 @@
+
+exports.up = function (knex, Promise) {
+    return knex.schema.createTable('groups', function (table) {
+        table.increments('id').unsigned().primary();
+        table.dateTime('createdAt').defaultTo(knex.fn.now());
+        table.dateTime('updatedAt').defaultTo(knex.fn.now());
+
+        table.string('name').notNullable();
+        table.string('website').defaultTo('');
+        table.text('description').defaultTo('');
+        table.enum('school', ['polytechnique', 'ensta', 'supoptique']).notNullable();
+    });
+};
+
+exports.down = function (knex, Promise) {
+    return knex.schema.dropTable('groups');
+};
diff --git a/package-lock.json b/package-lock.json
index 977695b..d44322b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1425,9 +1425,9 @@
       }
     },
     "eslint-plugin-node": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.0.tgz",
-      "integrity": "sha512-Qj4dMF1N/wRALO1IRvnchn8c1i0awgrztrGx7MjF9ewDwlW/heNB+WeZ09bhp8Yp0TD+BZcADP8BRya0wmropA==",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz",
+      "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==",
       "dev": true,
       "requires": {
         "ignore": "3.3.7",
diff --git a/package.json b/package.json
index 87e6f72..cd6308e 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "sigma-backend",
   "version": "0.0.1",
   "description": "Backend of sigma, the new Frankiz",
-  "main": "dist/bundle.js",
+  "main": "build/bundle.js",
   "dependencies": {
     "body-parser": "^1.18.2",
     "express": "^4.16.2",
@@ -17,7 +17,7 @@
     "eslint": "^4.18.1",
     "eslint-config-standard": "^11.0.0",
     "eslint-plugin-import": "^2.9.0",
-    "eslint-plugin-node": "^6.0.0",
+    "eslint-plugin-node": "^6.0.1",
     "eslint-plugin-promise": "^3.6.0",
     "eslint-plugin-standard": "^3.0.1",
     "nodemon": "^1.15.1",
@@ -25,11 +25,11 @@
     "webpack-node-externals": "^1.6.0"
   },
   "scripts": {
-    "start": "node dist/bundle.js",
-    "eslint": "eslint",
+    "start": "node build/bundle.js",
+    "lint": "eslint",
     "build": "webpack",
     "watch": "webpack --watch",
-    "test": "nodemon --watch dist dist/bundle.js"
+    "test": "nodemon --watch build build/bundle.js"
   },
   "repository": {
     "type": "git",
diff --git a/seeds/01_create_groups.js b/seeds/01_create_groups.js
new file mode 100644
index 0000000..5b5fd24
--- /dev/null
+++ b/seeds/01_create_groups.js
@@ -0,0 +1,29 @@
+
+exports.seed = function(knex, Promise) {
+  // Deletes ALL existing entries
+  return knex('groups').del()
+    .then(function () {
+      // Inserts seed entries
+      const groups = [{
+          id: 1,
+          name: 'BR',
+          website: 'br.binets.fr',
+          school: 'polytechnique'
+        },
+        {
+          id: 2,
+          name: 'JTX',
+          website: 'binet-jtx.com',
+          school: 'polytechnique'
+        },
+        {
+          id: 3,
+          name: 'DaTA',
+          website: 'data-ensta.fr',
+          school: 'ensta'
+        }
+      ];
+
+      return knex('groups').insert(groups);
+    });
+};
diff --git a/src/index.js b/src/index.js
index 6dfce79..dbc5bb4 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,11 +1,18 @@
-import server from './server'
+import server from './server';
+import knex from '../knex_router';
 
 server.get('/', function(req, res) {
-    console.log('Connectting to '+req.url)
-    res.send('<h1>Hello, world</h1>\nHello, world ! This is server talking to you live from Omaha on port '+port+' !')
-})
+    console.log('Connectting to '+req.url);
+    res.send('<h1>Hello, world</h1>\nHello, world ! This is server talking to you live from Omaha on port '+port+' !');
+});
+
+server.get('/groups', function(req, res) {
+    knex.select().from('groups').then(function(groups) {
+        res.send(groups);
+    });
+});
 
 // define port server is to listen on
-const port = process.env.PORT || 8888
+const port = process.env.PORT || 3000;
 
-server.listen(port, () => console.log('Express server running on port '+port))
\ No newline at end of file
+server.listen(port, () => console.log('Express server running on port '+port));
\ No newline at end of file
diff --git a/src/server.js b/src/server.js
index bc37a0e..22af206 100644
--- a/src/server.js
+++ b/src/server.js
@@ -1,14 +1,14 @@
-import express from 'express'
-import bodyParser from 'body-parser'
-import morgan from 'morgan'
+import express from 'express';
+import bodyParser from 'body-parser';
+import morgan from 'morgan';
 
-let server = express()
+let server = express();
 
-server.use(bodyParser.json())
+server.use(bodyParser.json());
 server.use(bodyParser.urlencoded({
     extended: false
-}))
+}));
 
-server.use(morgan('dev'))
+server.use(morgan('dev'));
 
-export default server
+export default server;
diff --git a/webpack.config.js b/webpack.config.js
index 2222fed..9ccf107 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,14 +1,14 @@
-const path = require('path')
-const nodeExternals = require('webpack-node-externals')
+const path = require('path');
+const nodeExternals = require('webpack-node-externals');
 
 var config = {
     entry: './src/index.js',
     target: 'node',
     output: {
         filename: 'bundle.js',
-        path: path.resolve(__dirname, 'dist')
+        path: path.resolve(__dirname, 'build')
     },
     externals: [nodeExternals()]
-}
+};
 
-module.exports = config
\ No newline at end of file
+module.exports = config;
\ No newline at end of file
-- 
GitLab