diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000000000000000000000000000000000..126664b4b7bca0c7d895b64e832bdfc7cf0cf5e1 --- /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 4181705062479a621e08c77b9221df89ee06e5db..4a158364ec5bc87690d9a0add466b826afc42c56 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 458bf37b42d35f106326cce89943a353f42659d9..9b5dfd3a41bee595d040514d9c09a7c0858b5d4e 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 1deb2229b6d38a27e420015279c5921b2550e53a..422034dd647f128ec91d60736355ba9be745b0d5 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 59b8ead741727bd4d0531f6d8aa264b5c252cb2e..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..0b63365e43d5dd97132d83a3a876a951eb0e6413 --- /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 ce86cf7bffc98b68ee72b0983c0a3e17569b4625..cc65ddc272b5d93a34a5440fb68d42df5be22a7e 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 0000000000000000000000000000000000000000..0bac711a26ce73dc0dec83a9e7b496037e670d84 --- /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 977695bcddb90193fe4fbfbe242c0c687da7e6fe..d44322b7814bcbea3af76ca77f246230843c5bc9 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 87e6f7217609a2d2591db67e3efc4d4fb3f9f4b9..cd6308e7077c44f4947b76ccf9af3d8a093a44eb 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 0000000000000000000000000000000000000000..5b5fd249909eb12653d30ebbf6bc3412b3027246 --- /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 6dfce7980974fe9a2209ae14e61d6f839981ae7e..dbc5bb44deb4afa39473812f496266f857060ca5 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 bc37a0eb012df3bbc8c0049fee81cbe8a37c8508..22af2060ce075633bea5d1ec58331d71a9b3e89b 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 2222fed1dcbe986368901c2a3dad45bede1e04f3..9ccf107546edc59c9578bf719082671d96a6f780 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