From 6e2a2e4999e31039eac9d6d62dac828c1788afce Mon Sep 17 00:00:00 2001 From: Allan Liebold Date: Tue, 1 Aug 2017 18:35:20 -0700 Subject: [PATCH 1/6] creates server and model --- test/house-route-test.js | 116 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 test/house-route-test.js diff --git a/test/house-route-test.js b/test/house-route-test.js new file mode 100644 index 0000000..6db3b54 --- /dev/null +++ b/test/house-route-test.js @@ -0,0 +1,116 @@ +'use strict'; + +const expect = require('chai').expect; +const request = require('superagent'); +const House = require('../model/house.js'); +const url = 'http://localhost:8000'; + +require('../server.js'); + +const exampleHouse = { + name: 'hodor', + seat: 'hodor', + region: 'hodor', + words: 'hodor' +}; + +describe('House Routes', function() { + + describe('GET: /api/house', function() { + describe('with a valid id', function() { + before(done => { + House.createHouse(exampleHouse) + .then(house => { + this.tempHouse = house; + done(); + }) + .catch(err => done(err)); + }); + + after(done => { + House.deleteHouse(this.tempHouse.id) + .then(() => done()) + .catch(err => done(err)); + }); + + if('should return a house', done => { + request.get(`${url}/api/house/${this.tempHouse.id}`) + .end((err, res) => { + if(err) return done(err); + expect(res.status).to.equal(200); + expect(res.body.id).to.equal(this.tempHouse.id); + expect(res.body.name).to.equal(this.tempHouse.name); + expect(res.body.seat).to.equal(this.tempHouse.seat); + expect(res.body.region).to.equal(this.tempHouse.region); + expect(res.body.words).to.equal(this.tempHouse.words); + done(); + }); + }); + + describe('with an invalid id', function() { + it('should return 404 status', done => { + request.get(`${url}/api/house/123456789`) + .end((err, res) => { + expect(res.status).to.equal(404); + done(); + }); + }); + }); + }); + }); + + describe('POST: /api/house', function() { + describe('with a valid body', function() { + after(done => { + if(this.tempHouse) { + House.deleteHouse(this.tempHouse.id) + .then(() => done()) + .catch(err => done(err)); + } + }); + + it('should return a house', done => { + request.post(`${url}/api/house`) + .send(exampleHouse) + .end((err, res) => { + if(err) return done(err); + expect(res.status).to.equal(200); + expect(res.body.name).to.equal(exampleHouse.name); + expect(res.body.seat).to.equal(exampleHouse.seat); + expect(res.body.region).to.equal(exampleHouse.region); + expect(res.body.words).to.equal(exampleHouse.words); + this.tempHouse = res.body; + done(); + }); + }); + }); + }); + + describe('PUT: /api/house', function() { + describe('with a valid id and body', function() { + before(done => { + House.createHouse(exampleHouse) + .then(house => { + this.tempHouse = house; + done(); + }) + .catch(err => done(err)); + }); + + it('should return a note', done => { + let updateHouse = { name: 'Atreides', seat: 'Arrakeen', region: 'Arrakis', words: 'Fear is the Mind-killer'}; + request.put(`${url}/api/house?id=${this.tempHouse.id}`) + .send(updateHouse) + .end((err, res) => { + if(err) return done(err); + expect(res.status).to.equal(200); + expect(res.body.id).to.equal(this.tempHouse.id); + for(var prop in updateHouse) { + expect(res.body[prop]).to.equal(updateHouse[prop]) + } + done(); + }); + }); + }); + }); +}); From 8feb561b6267a5ed782ce6dafb250607b38a4979 Mon Sep 17 00:00:00 2001 From: Allan Liebold Date: Tue, 1 Aug 2017 18:36:32 -0700 Subject: [PATCH 2/6] creates server and model --- .eslintrc | 33 +++ .gitignore | 1 + lib/cors-middleware.js | 7 + lib/error-middleware.js | 21 ++ lib/storage.js | 49 ++++ model/house.js | 60 ++++ package-lock.json | 629 ++++++++++++++++++++++++++++++++++++++++ package.json | 35 +++ route/house-router.js | 33 +++ server.js | 22 ++ 10 files changed, 890 insertions(+) create mode 100644 .eslintrc create mode 100644 .gitignore create mode 100644 lib/cors-middleware.js create mode 100644 lib/error-middleware.js create mode 100644 lib/storage.js create mode 100644 model/house.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 route/house-router.js create mode 100644 server.js diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..881053e --- /dev/null +++ b/.eslintrc @@ -0,0 +1,33 @@ +{ +"rules": { +"no-console": "off", +"indent": [ +"error", +2 +], +"quotes": [ +"error", +"single" +], +"semi": [ +"error", +"always" +], +"linebreak-style": [ +"error", +"unix" +] +}, +"env": { +"es6": true, +"node": true, +"mocha": true, +"jasmine": true +}, +"ecmaFeatures": { +"modules": true, +"experimentalObjectRestSpread": true, +"impliedStrict": true +}, +"extends": "eslint:recommended" +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/lib/cors-middleware.js b/lib/cors-middleware.js new file mode 100644 index 0000000..5dcf9d1 --- /dev/null +++ b/lib/cors-middleware.js @@ -0,0 +1,7 @@ +'use strict'; + +module.exports = function(req, res, next) { + res.append('Access-Control-Allow-Origin', '*'); + res.append('Access-Control-Allow-Headers', '*'); + next(); +} diff --git a/lib/error-middleware.js b/lib/error-middleware.js new file mode 100644 index 0000000..05fe9a7 --- /dev/null +++ b/lib/error-middleware.js @@ -0,0 +1,21 @@ +'use strict'; + +const createError = require('http-errors'); +const debug = require('debug')('house:error-middleware'); + +module.exports = function(err, req, res, next) { + console.error(err.message); + + if(err.status) { + debug('user error'); + + res.status(err.status).send(err.name); + next(); + return; + } + + debug('server error'); + err = createError(500, err.message); + res.status(err.status).send(err.name); + next(); +}; diff --git a/lib/storage.js b/lib/storage.js new file mode 100644 index 0000000..2a0bf61 --- /dev/null +++ b/lib/storage.js @@ -0,0 +1,49 @@ +'use strict'; + +const Promise = require('bluebird'); +const fs = Promise.promisifyAll(require('fs'), { suffic: 'Prom' }); +const createError = require('http-errors'); +const debug = require('debug')('house:storage'); + +module.exports = exports = {}; + +exports.createItem = function(schemaName,item) { + debug('createItem'); + + if(!schemaName) return Promise.reject(createError(400, 'expected schema name')); + if(!item) return Promise.reject(createError(400, 'expected item')); + + let json = JSON.stringify(item); + return fs.writeFileProm(`${__dirname}/../data/${schemaName}/${item.id}.json`, json) + .then(() => item) + .catch(err => Promise.reject(createError(500, err.message))); +}; + +exports.fetchItem = function(schemaName, id) { + debug('fetchItem'); + + if(!schemaName) return Promise.reject(createError(400, 'expected schema name')); + if(!id) return Promise.reject(createError(400, 'expected id')); + + return fs.readFileProm(`${__dirname}/../data/${schemaName}/${id}.json`) + .then(data => { + try { + let item = JSON.parse(data.toString()) + return item; + } catch(err) { + return Promise.reject(createError(500, err.message)); + } + }) + .catch(err => Promise.reject(createError(404, err.message))); +}; + +exports.deleteItem = function(schemaName, id) { + debug('deleteItem'); + + if(!schemaName) return Promise.reject(createError(400, 'expected schema name')); + if(!id) return Promise.reject(createError(400, 'expected id')); + + return fs.unlinkProm(`${__dirname}/../data/${schemaName}`) + .then(files => files.map(name => name.split('json')[0])) + .catch(err => Promise.reject(createError(404, err.message))); +} diff --git a/model/house.js b/model/house.js new file mode 100644 index 0000000..2ae74c8 --- /dev/null +++ b/model/house.js @@ -0,0 +1,60 @@ +'use strict'; + +const uuidv4 = require('uuid/v4'); +const createError = require('http-errors'); +const debug = require ('debug')('house:house'); +const storage = require('../lib/storage.js'); + +const House = module.exports = function(name, seat, region, words) { + debug('house constructor'); + + if(!name) throw new Error('expected name'); + if(!seat) throw new Error('expected seat'); + if(!region) throw new Error('expected region'); + if(!words) throw new Error('expected words'); + + this.id = uuidv4(); + this.name = name; + this.seat = seat; + this.region = region; + this.words = words; +}; + +House.createHouse = function(_house) { + debug('createHouse'); + + try { + let house = new House(_house.name, _house.seat, _house.region, _house.words); + return storage.createItem('house', house); + } catch(err) { + return Promise.reject(err); + } +} + +House.fetchHouse = function(id) { + debug('fetchHouse'); + return storage.fetchItem('house', id); +} + +House.updateHouse = function(id, _house) { + debug('updateHouse'); + + return storage.fetchItem('house', id) + .catch(err => Promise.reject(createError(404, err.message))) + .then(house => { + for(var prop in house) { + if(prop === 'id') continue; + if(_house[prop]) house[prop] = _house[prop]; + } + return storage.createItem('house', house); + }); +} + +House.deleteHouse = function(id) { + debug('deleteHouse'); +} + +House.fetchIDs = function() { + debug('fetchIDs'); + return storage.availIDs('house'); +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ff5dcf5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,629 @@ +{ + "name": "12-express-middleware", + "version": "1.0.0", + "lockfileVersion": 1, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "assertion-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "basic-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=" + }, + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" + }, + "body-parser": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", + "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" + } + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + }, + "chai": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.0.tgz", + "integrity": "sha1-MxoDkbVcOvh0CunDt0WLwcOAXm0=", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", + "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" + }, + "deep-eql": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-2.0.2.tgz", + "integrity": "sha1-sbrAblbwp2d3aG1Qyf63XC7XZ5o=", + "dev": true, + "dependencies": { + "type-detect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-3.0.0.tgz", + "integrity": "sha1-RtDMhVOrt7E6NSsNbeov1Y8tm1U=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "etag": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=" + }, + "express": { + "version": "4.15.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", + "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "finalhandler": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", + "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" + } + } + }, + "form-data": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.2.0.tgz", + "integrity": "sha1-ml47kpX5gLJiPPZPojixTOvKcHs=", + "dev": true + }, + "formidable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", + "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=", + "dev": true + }, + "forwarded": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", + "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=" + }, + "fresh": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", + "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "http-errors": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", + "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", + "dependencies": { + "depd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" + } + } + }, + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + }, + "mime-db": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", + "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" + }, + "mime-types": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true + }, + "mocha": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.0.tgz", + "integrity": "sha512-pIU2PJjrPYvYRqVpjXzj76qltO9uBYI7woYAMoxbSefsa+vqAfptjoeevd6bUgwD0mPIO+hv9f7ltvsNreL2PA==", + "dev": true + }, + "morgan": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.8.2.tgz", + "integrity": "sha1-eErHc05KRTqcbm6GgKkyknXItoc=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true + }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "proxy-addr": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=" + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", + "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=" + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "send": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", + "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" + } + } + }, + "serve-static": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", + "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=" + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + }, + "superagent": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.5.2.tgz", + "integrity": "sha1-M2GjlxVnUEw1EGOr6q4PqiPb8/g=", + "dev": true + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true + }, + "type-detect": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", + "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", + "dev": true + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "vary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", + "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ebbc43c --- /dev/null +++ b/package.json @@ -0,0 +1,35 @@ +{ + "name": "12-express-middleware", + "version": "1.0.0", + "description": "![cf](https://i.imgur.com/7v5ASc8.png) 12: Express Middleware ======", + "main": "server.js", + "scripts": { + "test": "DEBUG='house*' ./node_modules/mocha/bin/mocha", + "start": "DEBUG='house*' node server.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ragnaroksedge/12-express-middleware.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/ragnaroksedge/12-express-middleware/issues" + }, + "homepage": "https://github.com/ragnaroksedge/12-express-middleware#readme", + "dependencies": { + "bluebird": "^3.5.0", + "body-parser": "^1.17.2", + "debug": "^2.6.8", + "express": "^4.15.3", + "http-errors": "^1.6.1", + "morgan": "^1.8.2", + "uuid": "^3.1.0" + }, + "devDependencies": { + "chai": "^4.1.0", + "mocha": "^3.5.0", + "superagent": "^3.5.2" + } +} diff --git a/route/house-router.js b/route/house-router.js new file mode 100644 index 0000000..30e395f --- /dev/null +++ b/route/house-router.js @@ -0,0 +1,33 @@ +'use strict'; + +const Router = require('express').Router; +const jsonParser = require('body-parser').json(); +const debug = require('debug')('house:house-router'); +const House = require('../model/house.js'); +const houseRouter = new Router(); + +houseRouter.post('/api/house', jsonParser, function(req, res, next) { + debug('POST: /api/house'); + + House.createHouse(req.body) + .then(house => res.json(house)) + .catch(err => next(err)); +}); + +houseRouter.get('/api/house/:id', function(req, res, next) { + debug('GET: /api/house/:id'); + + House.fetchHouse(req.params.id) + .then(house => res.json(house)) + .catch(err => next(err)); +}); + +houseRouter.put('/api/house', jsonParser, function(req, res, next) { + debug('PUT: /api/house'); + + House.updateHouse(req.query.id, req.body) + .then(house => res.json(house)) + .catch(err => next(err)); +}); + +module.exports = houseRouter; diff --git a/server.js b/server.js new file mode 100644 index 0000000..1d78217 --- /dev/null +++ b/server.js @@ -0,0 +1,22 @@ +'use strict'; + +const morgan = require('morgan'); +const express = require('express'); +const createError = require('http-errors'); +const debug = require('debug')('house:server'); + +const houseRouter = require('./route/house-router.js'); +const cors = require('./lib/cors-middleware.js'); +const errors = require('./lib/error-middleware.js'); + +const PORT = process.env.PORT || 3000; +const app = express(); + +app.use(morgan('dev')); +app.use(cors); +app.use(houseRouter); +app.use(errors); + +app.listen(PORT, () => { + console.log(`server: ${PORT}`); +}); From 3acaac647c801932d2d18fc344e46a595e9a2ec9 Mon Sep 17 00:00:00 2001 From: Allan Liebold Date: Tue, 1 Aug 2017 18:42:16 -0700 Subject: [PATCH 3/6] fixed typo --- data/house/225043a1-31ba-42cd-8747-4e490a55de42.json | 1 + data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json | 1 + data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json | 1 + lib/storage.js | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 data/house/225043a1-31ba-42cd-8747-4e490a55de42.json create mode 100644 data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json create mode 100644 data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json diff --git a/data/house/225043a1-31ba-42cd-8747-4e490a55de42.json b/data/house/225043a1-31ba-42cd-8747-4e490a55de42.json new file mode 100644 index 0000000..4becfc3 --- /dev/null +++ b/data/house/225043a1-31ba-42cd-8747-4e490a55de42.json @@ -0,0 +1 @@ +{"id":"225043a1-31ba-42cd-8747-4e490a55de42","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json b/data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json new file mode 100644 index 0000000..a3e1d73 --- /dev/null +++ b/data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json @@ -0,0 +1 @@ +{"id":"d2188997-8c8f-4cc1-b6ab-3baae2487c93","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json b/data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json new file mode 100644 index 0000000..e81de93 --- /dev/null +++ b/data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json @@ -0,0 +1 @@ +{"id":"e922bd8e-6fda-40e0-9074-1ad4dc64676a","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/lib/storage.js b/lib/storage.js index 2a0bf61..b815cc2 100644 --- a/lib/storage.js +++ b/lib/storage.js @@ -1,7 +1,7 @@ 'use strict'; const Promise = require('bluebird'); -const fs = Promise.promisifyAll(require('fs'), { suffic: 'Prom' }); +const fs = Promise.promisifyAll(require('fs'), { suffix: 'Prom' }); const createError = require('http-errors'); const debug = require('debug')('house:storage'); From e4f1cf40745e451e30afb9450fae42f7753ce7e0 Mon Sep 17 00:00:00 2001 From: Allan Liebold Date: Tue, 1 Aug 2017 18:55:24 -0700 Subject: [PATCH 4/6] adds tests --- data/house/12ff38d2-4bb0-499c-bdd0-71ba40daa381.json | 1 + data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json | 1 + data/house/225ac3de-41e7-4f18-a507-ed321335a298.json | 1 + data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json | 1 + data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json | 1 + data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json | 1 + data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json | 1 + data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json | 1 + data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json | 1 + data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json | 1 + data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json | 1 + data/house/ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json | 1 + lib/storage.js | 4 ++-- test/house-route-test.js | 12 ++++++++++-- 14 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 data/house/12ff38d2-4bb0-499c-bdd0-71ba40daa381.json create mode 100644 data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json create mode 100644 data/house/225ac3de-41e7-4f18-a507-ed321335a298.json create mode 100644 data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json create mode 100644 data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json create mode 100644 data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json create mode 100644 data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json create mode 100644 data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json create mode 100644 data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json create mode 100644 data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json create mode 100644 data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json create mode 100644 data/house/ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json diff --git a/data/house/12ff38d2-4bb0-499c-bdd0-71ba40daa381.json b/data/house/12ff38d2-4bb0-499c-bdd0-71ba40daa381.json new file mode 100644 index 0000000..7ab126c --- /dev/null +++ b/data/house/12ff38d2-4bb0-499c-bdd0-71ba40daa381.json @@ -0,0 +1 @@ +{"id":"12ff38d2-4bb0-499c-bdd0-71ba40daa381","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json b/data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json new file mode 100644 index 0000000..397f237 --- /dev/null +++ b/data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json @@ -0,0 +1 @@ +{"id":"1b2e1b87-41d3-4445-a94d-20d372755993","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/225ac3de-41e7-4f18-a507-ed321335a298.json b/data/house/225ac3de-41e7-4f18-a507-ed321335a298.json new file mode 100644 index 0000000..e03b4b1 --- /dev/null +++ b/data/house/225ac3de-41e7-4f18-a507-ed321335a298.json @@ -0,0 +1 @@ +{"id":"225ac3de-41e7-4f18-a507-ed321335a298","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json b/data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json new file mode 100644 index 0000000..24bbf14 --- /dev/null +++ b/data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json @@ -0,0 +1 @@ +{"id":"2af12316-f7c6-4a58-9f33-31456b9cc432","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json b/data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json new file mode 100644 index 0000000..9e253b0 --- /dev/null +++ b/data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json @@ -0,0 +1 @@ +{"id":"6949207a-e7be-4375-b0a9-2cd50115e61b","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json b/data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json new file mode 100644 index 0000000..0d30ada --- /dev/null +++ b/data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json @@ -0,0 +1 @@ +{"id":"7078e5b7-9921-45f1-9c2b-a40121a6a1d6","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json b/data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json new file mode 100644 index 0000000..702add0 --- /dev/null +++ b/data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json @@ -0,0 +1 @@ +{"id":"93036c95-20eb-4223-b1e3-09e09d722c7f","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json b/data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json new file mode 100644 index 0000000..8b14407 --- /dev/null +++ b/data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json @@ -0,0 +1 @@ +{"id":"ba37c0a7-42c7-4f00-a25c-ac686564a75f","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json b/data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json new file mode 100644 index 0000000..270f24d --- /dev/null +++ b/data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json @@ -0,0 +1 @@ +{"id":"cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json b/data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json new file mode 100644 index 0000000..6e66cdf --- /dev/null +++ b/data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json @@ -0,0 +1 @@ +{"id":"db57261a-550d-4cc6-af73-5fc7078664b4","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json b/data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json new file mode 100644 index 0000000..0ff9956 --- /dev/null +++ b/data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json @@ -0,0 +1 @@ +{"id":"e2fe0810-60b2-4095-b571-8485e2219b5a","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json b/data/house/ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json new file mode 100644 index 0000000..0ccf1ee --- /dev/null +++ b/data/house/ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json @@ -0,0 +1 @@ +{"id":"ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/lib/storage.js b/lib/storage.js index b815cc2..26a5d4e 100644 --- a/lib/storage.js +++ b/lib/storage.js @@ -28,7 +28,7 @@ exports.fetchItem = function(schemaName, id) { return fs.readFileProm(`${__dirname}/../data/${schemaName}/${id}.json`) .then(data => { try { - let item = JSON.parse(data.toString()) + let item = JSON.parse(data.toString()); return item; } catch(err) { return Promise.reject(createError(500, err.message)); @@ -46,4 +46,4 @@ exports.deleteItem = function(schemaName, id) { return fs.unlinkProm(`${__dirname}/../data/${schemaName}`) .then(files => files.map(name => name.split('json')[0])) .catch(err => Promise.reject(createError(404, err.message))); -} +}; diff --git a/test/house-route-test.js b/test/house-route-test.js index 6db3b54..f977229 100644 --- a/test/house-route-test.js +++ b/test/house-route-test.js @@ -33,7 +33,7 @@ describe('House Routes', function() { .catch(err => done(err)); }); - if('should return a house', done => { + it('should return a house', done => { request.get(`${url}/api/house/${this.tempHouse.id}`) .end((err, res) => { if(err) return done(err); @@ -97,6 +97,14 @@ describe('House Routes', function() { .catch(err => done(err)); }); + after(done => { + if(this.tempHouse) { + House.deleteHouse(this.tempHouse.id) + .then(() => done()) + .catch(done); + } + }); + it('should return a note', done => { let updateHouse = { name: 'Atreides', seat: 'Arrakeen', region: 'Arrakis', words: 'Fear is the Mind-killer'}; request.put(`${url}/api/house?id=${this.tempHouse.id}`) @@ -106,7 +114,7 @@ describe('House Routes', function() { expect(res.status).to.equal(200); expect(res.body.id).to.equal(this.tempHouse.id); for(var prop in updateHouse) { - expect(res.body[prop]).to.equal(updateHouse[prop]) + expect(res.body[prop]).to.equal(updateHouse[prop]); } done(); }); From 80aa2eb5fb8f23e63073ec4a7c8d0787c37836d2 Mon Sep 17 00:00:00 2001 From: Allan Liebold Date: Wed, 2 Aug 2017 00:20:39 -0700 Subject: [PATCH 5/6] fixes tests and delete method --- data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json | 1 - data/house/225043a1-31ba-42cd-8747-4e490a55de42.json | 1 - data/house/225ac3de-41e7-4f18-a507-ed321335a298.json | 1 - data/house/28711121-035f-48e3-93f8-44a0e1f5d5d8.json | 1 + data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json | 1 - data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json | 1 - data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json | 1 - data/house/749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json | 1 + data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json | 1 - data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json | 1 - data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json | 1 - ...son => ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json} | 2 +- data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json | 1 - data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json | 1 - data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json | 1 - data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json | 1 - lib/storage.js | 10 ++++++++-- model/house.js | 12 +++++++----- test/house-route-test.js | 2 +- 19 files changed, 19 insertions(+), 22 deletions(-) delete mode 100644 data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json delete mode 100644 data/house/225043a1-31ba-42cd-8747-4e490a55de42.json delete mode 100644 data/house/225ac3de-41e7-4f18-a507-ed321335a298.json create mode 100644 data/house/28711121-035f-48e3-93f8-44a0e1f5d5d8.json delete mode 100644 data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json delete mode 100644 data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json delete mode 100644 data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json create mode 100644 data/house/749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json delete mode 100644 data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json delete mode 100644 data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json delete mode 100644 data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json rename data/house/{12ff38d2-4bb0-499c-bdd0-71ba40daa381.json => ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json} (52%) delete mode 100644 data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json delete mode 100644 data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json delete mode 100644 data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json delete mode 100644 data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json diff --git a/data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json b/data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json deleted file mode 100644 index 397f237..0000000 --- a/data/house/1b2e1b87-41d3-4445-a94d-20d372755993.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"1b2e1b87-41d3-4445-a94d-20d372755993","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/225043a1-31ba-42cd-8747-4e490a55de42.json b/data/house/225043a1-31ba-42cd-8747-4e490a55de42.json deleted file mode 100644 index 4becfc3..0000000 --- a/data/house/225043a1-31ba-42cd-8747-4e490a55de42.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"225043a1-31ba-42cd-8747-4e490a55de42","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/225ac3de-41e7-4f18-a507-ed321335a298.json b/data/house/225ac3de-41e7-4f18-a507-ed321335a298.json deleted file mode 100644 index e03b4b1..0000000 --- a/data/house/225ac3de-41e7-4f18-a507-ed321335a298.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"225ac3de-41e7-4f18-a507-ed321335a298","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/28711121-035f-48e3-93f8-44a0e1f5d5d8.json b/data/house/28711121-035f-48e3-93f8-44a0e1f5d5d8.json new file mode 100644 index 0000000..700fe2a --- /dev/null +++ b/data/house/28711121-035f-48e3-93f8-44a0e1f5d5d8.json @@ -0,0 +1 @@ +{"id":"28711121-035f-48e3-93f8-44a0e1f5d5d8","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json b/data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json deleted file mode 100644 index 24bbf14..0000000 --- a/data/house/2af12316-f7c6-4a58-9f33-31456b9cc432.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"2af12316-f7c6-4a58-9f33-31456b9cc432","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json b/data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json deleted file mode 100644 index 9e253b0..0000000 --- a/data/house/6949207a-e7be-4375-b0a9-2cd50115e61b.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"6949207a-e7be-4375-b0a9-2cd50115e61b","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json b/data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json deleted file mode 100644 index 0d30ada..0000000 --- a/data/house/7078e5b7-9921-45f1-9c2b-a40121a6a1d6.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"7078e5b7-9921-45f1-9c2b-a40121a6a1d6","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json b/data/house/749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json new file mode 100644 index 0000000..c502f88 --- /dev/null +++ b/data/house/749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json @@ -0,0 +1 @@ +{"id":"749dc519-30aa-4c54-adf1-ae7d5b5fa7b9","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json b/data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json deleted file mode 100644 index 702add0..0000000 --- a/data/house/93036c95-20eb-4223-b1e3-09e09d722c7f.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"93036c95-20eb-4223-b1e3-09e09d722c7f","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json b/data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json deleted file mode 100644 index 8b14407..0000000 --- a/data/house/ba37c0a7-42c7-4f00-a25c-ac686564a75f.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"ba37c0a7-42c7-4f00-a25c-ac686564a75f","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json b/data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json deleted file mode 100644 index 270f24d..0000000 --- a/data/house/cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"cdf586cd-7cca-42bb-8ab4-a71eebc4f2e0","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/12ff38d2-4bb0-499c-bdd0-71ba40daa381.json b/data/house/ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json similarity index 52% rename from data/house/12ff38d2-4bb0-499c-bdd0-71ba40daa381.json rename to data/house/ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json index 7ab126c..cabcb54 100644 --- a/data/house/12ff38d2-4bb0-499c-bdd0-71ba40daa381.json +++ b/data/house/ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json @@ -1 +1 @@ -{"id":"12ff38d2-4bb0-499c-bdd0-71ba40daa381","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file +{"id":"ceca73d2-e8e2-4a9c-9e0c-61d841306f24","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json b/data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json deleted file mode 100644 index a3e1d73..0000000 --- a/data/house/d2188997-8c8f-4cc1-b6ab-3baae2487c93.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"d2188997-8c8f-4cc1-b6ab-3baae2487c93","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json b/data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json deleted file mode 100644 index 6e66cdf..0000000 --- a/data/house/db57261a-550d-4cc6-af73-5fc7078664b4.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"db57261a-550d-4cc6-af73-5fc7078664b4","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json b/data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json deleted file mode 100644 index 0ff9956..0000000 --- a/data/house/e2fe0810-60b2-4095-b571-8485e2219b5a.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"e2fe0810-60b2-4095-b571-8485e2219b5a","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json b/data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json deleted file mode 100644 index e81de93..0000000 --- a/data/house/e922bd8e-6fda-40e0-9074-1ad4dc64676a.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"e922bd8e-6fda-40e0-9074-1ad4dc64676a","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/lib/storage.js b/lib/storage.js index 26a5d4e..6fbe1cc 100644 --- a/lib/storage.js +++ b/lib/storage.js @@ -7,7 +7,7 @@ const debug = require('debug')('house:storage'); module.exports = exports = {}; -exports.createItem = function(schemaName,item) { +exports.createItem = function(schemaName, item) { debug('createItem'); if(!schemaName) return Promise.reject(createError(400, 'expected schema name')); @@ -43,7 +43,13 @@ exports.deleteItem = function(schemaName, id) { if(!schemaName) return Promise.reject(createError(400, 'expected schema name')); if(!id) return Promise.reject(createError(400, 'expected id')); - return fs.unlinkProm(`${__dirname}/../data/${schemaName}`) + return fs.unlinkProm(`${__dirname}/../data/${schemaName}/${id}.json`) + .then(() => console.log('item deleted')) + .catch(err => Promise.reject(createError(404, err.message))); +}; + +exports.availIDs = function(schemaName) { + return fs.readdirProm(`${__dirname}/../data/${schemaName}`) .then(files => files.map(name => name.split('json')[0])) .catch(err => Promise.reject(createError(404, err.message))); }; diff --git a/model/house.js b/model/house.js index 2ae74c8..2278279 100644 --- a/model/house.js +++ b/model/house.js @@ -29,12 +29,12 @@ House.createHouse = function(_house) { } catch(err) { return Promise.reject(err); } -} +}; House.fetchHouse = function(id) { debug('fetchHouse'); return storage.fetchItem('house', id); -} +}; House.updateHouse = function(id, _house) { debug('updateHouse'); @@ -48,13 +48,15 @@ House.updateHouse = function(id, _house) { } return storage.createItem('house', house); }); -} +}; House.deleteHouse = function(id) { debug('deleteHouse'); -} + + return storage.deleteItem('house', id); +}; House.fetchIDs = function() { debug('fetchIDs'); return storage.availIDs('house'); -} +}; diff --git a/test/house-route-test.js b/test/house-route-test.js index f977229..8e5175b 100644 --- a/test/house-route-test.js +++ b/test/house-route-test.js @@ -105,7 +105,7 @@ describe('House Routes', function() { } }); - it('should return a note', done => { + it('should return a house', done => { let updateHouse = { name: 'Atreides', seat: 'Arrakeen', region: 'Arrakis', words: 'Fear is the Mind-killer'}; request.put(`${url}/api/house?id=${this.tempHouse.id}`) .send(updateHouse) From 25e80d054ad079a66a09366ba06fcf718a1a493b Mon Sep 17 00:00:00 2001 From: Allan Liebold Date: Wed, 2 Aug 2017 00:52:11 -0700 Subject: [PATCH 6/6] adds data and get request to fetch all IDs --- .../14e0178a-59f2-4075-abe8-a7a3389fc993.json | 1 + .../28711121-035f-48e3-93f8-44a0e1f5d5d8.json | 1 - .../29487796-44f5-460e-a8f4-03b1759be79a.json | 1 + .../29cf2d74-06a7-4844-832c-ee038118b044.json | 1 + .../30dfab51-4854-4bc4-b1f5-f39ac54a5b1e.json | 1 + .../3e6bf8d7-4e0c-44f7-a1c2-37c83c925269.json | 1 + .../54e56114-37fe-4421-bbea-16b41eefba07.json | 1 + .../5fe38d3f-1c86-4cfe-8a44-4e4963adebdc.json | 1 + .../749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json | 1 - .../80870533-a0aa-4633-ac66-5722f22805e8.json | 1 + .../902bd209-35d1-46b8-9a6e-0fe52d1c4245.json | 1 + .../94aa22e8-d220-4afa-b05e-db683b2a6bae.json | 1 + .../9c1927d8-3fe0-4437-be9d-4a6ef43cc134.json | 1 + .../9dd53213-ddfc-41c5-a4b1-2f0f977676c8.json | 1 + .../a08d0863-64f9-4b9e-8c4c-011f23f58a80.json | 1 + .../a0dec095-2e28-4afc-aa79-c18478328074.json | 1 + .../a659cc81-bad0-4f25-b877-a25d2cde79f3.json | 1 + .../afa015eb-3ba1-4b03-bcf7-049ebe2c77fb.json | 1 + .../b7dab937-9b02-4453-86da-0d5dd2e38f1e.json | 1 + .../c5dbd7b2-7b4a-4434-aedd-630f686fb5f9.json | 1 + .../c95be38c-1ba9-4475-87af-f492e381f69c.json | 1 + .../ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json | 1 - .../ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json | 1 - .../fab76973-7a1a-4dae-88c9-754fe90e4f85.json | 1 + route/house-router.js | 18 ++++++++++++++++++ 25 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 data/house/14e0178a-59f2-4075-abe8-a7a3389fc993.json delete mode 100644 data/house/28711121-035f-48e3-93f8-44a0e1f5d5d8.json create mode 100644 data/house/29487796-44f5-460e-a8f4-03b1759be79a.json create mode 100644 data/house/29cf2d74-06a7-4844-832c-ee038118b044.json create mode 100644 data/house/30dfab51-4854-4bc4-b1f5-f39ac54a5b1e.json create mode 100644 data/house/3e6bf8d7-4e0c-44f7-a1c2-37c83c925269.json create mode 100644 data/house/54e56114-37fe-4421-bbea-16b41eefba07.json create mode 100644 data/house/5fe38d3f-1c86-4cfe-8a44-4e4963adebdc.json delete mode 100644 data/house/749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json create mode 100644 data/house/80870533-a0aa-4633-ac66-5722f22805e8.json create mode 100644 data/house/902bd209-35d1-46b8-9a6e-0fe52d1c4245.json create mode 100644 data/house/94aa22e8-d220-4afa-b05e-db683b2a6bae.json create mode 100644 data/house/9c1927d8-3fe0-4437-be9d-4a6ef43cc134.json create mode 100644 data/house/9dd53213-ddfc-41c5-a4b1-2f0f977676c8.json create mode 100644 data/house/a08d0863-64f9-4b9e-8c4c-011f23f58a80.json create mode 100644 data/house/a0dec095-2e28-4afc-aa79-c18478328074.json create mode 100644 data/house/a659cc81-bad0-4f25-b877-a25d2cde79f3.json create mode 100644 data/house/afa015eb-3ba1-4b03-bcf7-049ebe2c77fb.json create mode 100644 data/house/b7dab937-9b02-4453-86da-0d5dd2e38f1e.json create mode 100644 data/house/c5dbd7b2-7b4a-4434-aedd-630f686fb5f9.json create mode 100644 data/house/c95be38c-1ba9-4475-87af-f492e381f69c.json delete mode 100644 data/house/ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json delete mode 100644 data/house/ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json create mode 100644 data/house/fab76973-7a1a-4dae-88c9-754fe90e4f85.json diff --git a/data/house/14e0178a-59f2-4075-abe8-a7a3389fc993.json b/data/house/14e0178a-59f2-4075-abe8-a7a3389fc993.json new file mode 100644 index 0000000..2fa9221 --- /dev/null +++ b/data/house/14e0178a-59f2-4075-abe8-a7a3389fc993.json @@ -0,0 +1 @@ +{"id":"14e0178a-59f2-4075-abe8-a7a3389fc993","name":"Royce","seat":"Runestone","region":"The Vale of Arryn","words":"We Remember"} \ No newline at end of file diff --git a/data/house/28711121-035f-48e3-93f8-44a0e1f5d5d8.json b/data/house/28711121-035f-48e3-93f8-44a0e1f5d5d8.json deleted file mode 100644 index 700fe2a..0000000 --- a/data/house/28711121-035f-48e3-93f8-44a0e1f5d5d8.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"28711121-035f-48e3-93f8-44a0e1f5d5d8","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/29487796-44f5-460e-a8f4-03b1759be79a.json b/data/house/29487796-44f5-460e-a8f4-03b1759be79a.json new file mode 100644 index 0000000..887d375 --- /dev/null +++ b/data/house/29487796-44f5-460e-a8f4-03b1759be79a.json @@ -0,0 +1 @@ +{"id":"29487796-44f5-460e-a8f4-03b1759be79a","name":"Greyjoy","seat":"Pyke","region":"The Iron Islands","words":"We Do Not Sow"} \ No newline at end of file diff --git a/data/house/29cf2d74-06a7-4844-832c-ee038118b044.json b/data/house/29cf2d74-06a7-4844-832c-ee038118b044.json new file mode 100644 index 0000000..b2be787 --- /dev/null +++ b/data/house/29cf2d74-06a7-4844-832c-ee038118b044.json @@ -0,0 +1 @@ +{"id":"29cf2d74-06a7-4844-832c-ee038118b044","name":"Arryn","seat":"The Eyrie","region":"The Vale of Arryn","words":"As High as Honor"} \ No newline at end of file diff --git a/data/house/30dfab51-4854-4bc4-b1f5-f39ac54a5b1e.json b/data/house/30dfab51-4854-4bc4-b1f5-f39ac54a5b1e.json new file mode 100644 index 0000000..4b4cf98 --- /dev/null +++ b/data/house/30dfab51-4854-4bc4-b1f5-f39ac54a5b1e.json @@ -0,0 +1 @@ +{"id":"30dfab51-4854-4bc4-b1f5-f39ac54a5b1e","name":"Targaryen","seat":"Dragonstone","region":"The Crownlands","words":"Fire and Blood"} \ No newline at end of file diff --git a/data/house/3e6bf8d7-4e0c-44f7-a1c2-37c83c925269.json b/data/house/3e6bf8d7-4e0c-44f7-a1c2-37c83c925269.json new file mode 100644 index 0000000..bce28b5 --- /dev/null +++ b/data/house/3e6bf8d7-4e0c-44f7-a1c2-37c83c925269.json @@ -0,0 +1 @@ +{"id":"3e6bf8d7-4e0c-44f7-a1c2-37c83c925269","name":"Baratheon","seat":"Storm's End","region":"The Stormlands","words":"Ours is the Fury"} \ No newline at end of file diff --git a/data/house/54e56114-37fe-4421-bbea-16b41eefba07.json b/data/house/54e56114-37fe-4421-bbea-16b41eefba07.json new file mode 100644 index 0000000..b3529c6 --- /dev/null +++ b/data/house/54e56114-37fe-4421-bbea-16b41eefba07.json @@ -0,0 +1 @@ +{"id":"54e56114-37fe-4421-bbea-16b41eefba07","name":"Cerwyn","seat":"Castle Cerwyn","region":"The North","words":"Honed and Ready"} \ No newline at end of file diff --git a/data/house/5fe38d3f-1c86-4cfe-8a44-4e4963adebdc.json b/data/house/5fe38d3f-1c86-4cfe-8a44-4e4963adebdc.json new file mode 100644 index 0000000..5b629d8 --- /dev/null +++ b/data/house/5fe38d3f-1c86-4cfe-8a44-4e4963adebdc.json @@ -0,0 +1 @@ +{"id":"5fe38d3f-1c86-4cfe-8a44-4e4963adebdc","name":"Hornwood","seat":"Hornwood","region":"The North","words":"Righteous in Wrath"} \ No newline at end of file diff --git a/data/house/749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json b/data/house/749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json deleted file mode 100644 index c502f88..0000000 --- a/data/house/749dc519-30aa-4c54-adf1-ae7d5b5fa7b9.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"749dc519-30aa-4c54-adf1-ae7d5b5fa7b9","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/80870533-a0aa-4633-ac66-5722f22805e8.json b/data/house/80870533-a0aa-4633-ac66-5722f22805e8.json new file mode 100644 index 0000000..a584e62 --- /dev/null +++ b/data/house/80870533-a0aa-4633-ac66-5722f22805e8.json @@ -0,0 +1 @@ +{"id":"80870533-a0aa-4633-ac66-5722f22805e8","name":"Lannister","seat":"Casterly Rock","region":"The Westerlands","words":"Hear Me Roar"} \ No newline at end of file diff --git a/data/house/902bd209-35d1-46b8-9a6e-0fe52d1c4245.json b/data/house/902bd209-35d1-46b8-9a6e-0fe52d1c4245.json new file mode 100644 index 0000000..fe0c038 --- /dev/null +++ b/data/house/902bd209-35d1-46b8-9a6e-0fe52d1c4245.json @@ -0,0 +1 @@ +{"id":"902bd209-35d1-46b8-9a6e-0fe52d1c4245","name":"Karstark","seat":"Karhold","region":"The North","words":"The Sun of Winter"} \ No newline at end of file diff --git a/data/house/94aa22e8-d220-4afa-b05e-db683b2a6bae.json b/data/house/94aa22e8-d220-4afa-b05e-db683b2a6bae.json new file mode 100644 index 0000000..4d684df --- /dev/null +++ b/data/house/94aa22e8-d220-4afa-b05e-db683b2a6bae.json @@ -0,0 +1 @@ +{"id":"94aa22e8-d220-4afa-b05e-db683b2a6bae","name":"Bolton","seat":"The Dreadfort","region":"The North","words":"Our Blades are Sharp"} \ No newline at end of file diff --git a/data/house/9c1927d8-3fe0-4437-be9d-4a6ef43cc134.json b/data/house/9c1927d8-3fe0-4437-be9d-4a6ef43cc134.json new file mode 100644 index 0000000..ff95a3a --- /dev/null +++ b/data/house/9c1927d8-3fe0-4437-be9d-4a6ef43cc134.json @@ -0,0 +1 @@ +{"id":"9c1927d8-3fe0-4437-be9d-4a6ef43cc134","name":"Mallister","seat":"Seagard","region":"The Riverlands","words":"Above the Rest"} \ No newline at end of file diff --git a/data/house/9dd53213-ddfc-41c5-a4b1-2f0f977676c8.json b/data/house/9dd53213-ddfc-41c5-a4b1-2f0f977676c8.json new file mode 100644 index 0000000..50f4bdf --- /dev/null +++ b/data/house/9dd53213-ddfc-41c5-a4b1-2f0f977676c8.json @@ -0,0 +1 @@ +{"id":"9dd53213-ddfc-41c5-a4b1-2f0f977676c8","name":"Tyrell","seat":"Highgarden","region":"The Reach","words":"Growing Strong"} \ No newline at end of file diff --git a/data/house/a08d0863-64f9-4b9e-8c4c-011f23f58a80.json b/data/house/a08d0863-64f9-4b9e-8c4c-011f23f58a80.json new file mode 100644 index 0000000..10f94da --- /dev/null +++ b/data/house/a08d0863-64f9-4b9e-8c4c-011f23f58a80.json @@ -0,0 +1 @@ +{"id":"a08d0863-64f9-4b9e-8c4c-011f23f58a80","name":"Stark","seat":"Winterfell","region":"The North","words":"Winter is Coming"} \ No newline at end of file diff --git a/data/house/a0dec095-2e28-4afc-aa79-c18478328074.json b/data/house/a0dec095-2e28-4afc-aa79-c18478328074.json new file mode 100644 index 0000000..b914121 --- /dev/null +++ b/data/house/a0dec095-2e28-4afc-aa79-c18478328074.json @@ -0,0 +1 @@ +{"id":"a0dec095-2e28-4afc-aa79-c18478328074","name":"Mormont","seat":"Bear Island","region":"The North","words":"Here We Stand"} \ No newline at end of file diff --git a/data/house/a659cc81-bad0-4f25-b877-a25d2cde79f3.json b/data/house/a659cc81-bad0-4f25-b877-a25d2cde79f3.json new file mode 100644 index 0000000..ba61188 --- /dev/null +++ b/data/house/a659cc81-bad0-4f25-b877-a25d2cde79f3.json @@ -0,0 +1 @@ +{"id":"a659cc81-bad0-4f25-b877-a25d2cde79f3","name":"Hightower","seat":"The Hightower","region":"The Reach","words":"We Light the Way"} \ No newline at end of file diff --git a/data/house/afa015eb-3ba1-4b03-bcf7-049ebe2c77fb.json b/data/house/afa015eb-3ba1-4b03-bcf7-049ebe2c77fb.json new file mode 100644 index 0000000..bd4c9e0 --- /dev/null +++ b/data/house/afa015eb-3ba1-4b03-bcf7-049ebe2c77fb.json @@ -0,0 +1 @@ +{"id":"afa015eb-3ba1-4b03-bcf7-049ebe2c77fb","name":"Frey","seat":"The Twins","region":"The Riverlands","words":"We Stand Together"} \ No newline at end of file diff --git a/data/house/b7dab937-9b02-4453-86da-0d5dd2e38f1e.json b/data/house/b7dab937-9b02-4453-86da-0d5dd2e38f1e.json new file mode 100644 index 0000000..e4d7cfb --- /dev/null +++ b/data/house/b7dab937-9b02-4453-86da-0d5dd2e38f1e.json @@ -0,0 +1 @@ +{"id":"b7dab937-9b02-4453-86da-0d5dd2e38f1e","name":"Tully","seat":"Riverrun","region":"The Riverlands","words":"Family Duty Honor"} \ No newline at end of file diff --git a/data/house/c5dbd7b2-7b4a-4434-aedd-630f686fb5f9.json b/data/house/c5dbd7b2-7b4a-4434-aedd-630f686fb5f9.json new file mode 100644 index 0000000..d1668f8 --- /dev/null +++ b/data/house/c5dbd7b2-7b4a-4434-aedd-630f686fb5f9.json @@ -0,0 +1 @@ +{"id":"c5dbd7b2-7b4a-4434-aedd-630f686fb5f9","name":"Martell","seat":"Sunspear","region":"Dorne","words":"Unbowed Unbent Unbroken"} \ No newline at end of file diff --git a/data/house/c95be38c-1ba9-4475-87af-f492e381f69c.json b/data/house/c95be38c-1ba9-4475-87af-f492e381f69c.json new file mode 100644 index 0000000..6458489 --- /dev/null +++ b/data/house/c95be38c-1ba9-4475-87af-f492e381f69c.json @@ -0,0 +1 @@ +{"id":"c95be38c-1ba9-4475-87af-f492e381f69c","name":"Stokeworth","seat":"Castle Stokeworth","region":"The Crownlands","words":"Proud to Be Faithful"} \ No newline at end of file diff --git a/data/house/ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json b/data/house/ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json deleted file mode 100644 index cabcb54..0000000 --- a/data/house/ceca73d2-e8e2-4a9c-9e0c-61d841306f24.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"ceca73d2-e8e2-4a9c-9e0c-61d841306f24","name":"Atreides","seat":"Arrakeen","region":"Arrakis","words":"Fear is the Mind-killer"} \ No newline at end of file diff --git a/data/house/ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json b/data/house/ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json deleted file mode 100644 index 0ccf1ee..0000000 --- a/data/house/ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"ebe6d330-bdfc-4cf5-8d11-00c7ddc2c74c","name":"hodor","seat":"hodor","region":"hodor","words":"hodor"} \ No newline at end of file diff --git a/data/house/fab76973-7a1a-4dae-88c9-754fe90e4f85.json b/data/house/fab76973-7a1a-4dae-88c9-754fe90e4f85.json new file mode 100644 index 0000000..e5b0be9 --- /dev/null +++ b/data/house/fab76973-7a1a-4dae-88c9-754fe90e4f85.json @@ -0,0 +1 @@ +{"id":"fab76973-7a1a-4dae-88c9-754fe90e4f85","name":"Tarly","seat":"Horn Hill","region":"The Reach","words":"First in Battle"} \ No newline at end of file diff --git a/route/house-router.js b/route/house-router.js index 30e395f..5c7f036 100644 --- a/route/house-router.js +++ b/route/house-router.js @@ -22,6 +22,14 @@ houseRouter.get('/api/house/:id', function(req, res, next) { .catch(err => next(err)); }); +houseRouter.get('/api/house', function(req, res, next) { + debug('GET: /api/house'); + + House.fetchIDs() + .then(ids => res.json(ids)) + .catch(err => next(err)); +}); + houseRouter.put('/api/house', jsonParser, function(req, res, next) { debug('PUT: /api/house'); @@ -30,4 +38,14 @@ houseRouter.put('/api/house', jsonParser, function(req, res, next) { .catch(err => next(err)); }); +houseRouter.delete('/api/house', function(req, res, next) { + debug('DELETE: /api/house'); + + House.deleteHouse(req.query.id) + .then(() => { + res.status(204).end(); + }) + .catch(err => next(err)); +}); + module.exports = houseRouter;