diff --git a/index.js b/index.js index 8b13789..e768b71 100644 --- a/index.js +++ b/index.js @@ -1 +1,105 @@ +var http = require('http'); +let users = require("./state").users; +let products = require("./state").products; +let server = http.createServer(messageReceived); +server.listen(8080); + +const postChucks = (req, res,urlselected) => { + let body = []; + req.on('data', (chunk) => { + body.push(chunk); + }).on('end', () => { + body = Buffer.concat(body).toString(); + let user = JSON.parse(body); + user.id = urlselected[urlselected.length-1].id+1 + res.end(JSON.stringify(user)) + urlselected.push(user); + }); +} + +const putChucks = (req, res,urlselected,slicePosition) => { + let body = []; + req.on('data', (chunk) => { + body.push(chunk); + }).on('end', () => { + body = Buffer.concat(body).toString(); + let user = JSON.parse(body); + user.id = urlselected[slicePosition].id + res.end(JSON.stringify(user)) + urlselected[slicePosition]=(user); + }); +} + +const deleteChucks = (req, res,urlselected,slicePosition) => { + res.end("Deleted") + urlselected.splice(slicePosition,1) +} + +function messageReceived(req, res) { + res.writeHead(200, {'Content-Type': 'text/plain'}); + const firstTerm = req.url.split("/")[1]; + const secondTerm = req.url.split("/")[2]; + + if(firstTerm=="favicon.ico"){ + res.end(); + return + } + + if(req.method === "GET" && secondTerm){ + let urlselected = requestSelector(firstTerm) + // let user = urlselected.find(p=>p["id"] == secondTerm); + let user = null; + if(secondTerm){ + // keeping this if statement in case path changes to what I think + // the assigment is asking + user = urlselected.find(p=>p["id"] == secondTerm); + }else{ + user = urlselected[Number(secondTerm[1])-1]; + } + if(!user){ + res.end("Not Found"); + }else{ + let usersJSON = JSON.stringify(user); + res.end(usersJSON); + } + + }else if(req.method === "GET"){ + let urlselected = requestSelector(firstTerm) + let usersJSON = JSON.stringify(urlselected); + res.end(usersJSON); + }else if(req.method === "POST"){ + let urlselected = requestSelector(firstTerm) + postChucks(req, res,urlselected); + // takes in a request, a response and an array to push the chunck to + }else if(req.method === "PUT" && secondTerm){ + let urlselected = requestSelector(firstTerm) + const slicePosition = urlselected.findIndex( (item,index) => { + return item.id == secondTerm; + }) + putChucks(req, res,urlselected,Number(slicePosition)) + + }else if(req.method === "DELETE" && secondTerm){ + let urlselected = requestSelector(firstTerm) + const slicePosition = urlselected.findIndex( (item,index) => { + return item.id == secondTerm; + }) + + deleteChucks(req, res,urlselected,Number(slicePosition)) + + } + + else{ + res.end("Not Found"); + } + +} + + +const requestSelector = (urlPath) => { + if(urlPath.toLowerCase()=="users"){ + return users; + }else if (urlPath.toLowerCase()=="products"){ + return products; + } +} \ No newline at end of file diff --git a/state.js b/state.js index ebab277..59f26ea 100644 --- a/state.js +++ b/state.js @@ -1,30 +1,30 @@ exports.users = [ { - "_id": 1, - "name": "Dale Cooper", + "id": 1, + "name": "Poopy McButts", "occupation": "FBI Agent", "avatar": "https://upload.wikimedia.org/wikipedia/en/5/50/Agentdalecooper.jpg" }, { - "_id": 2, + "id": 2, "name": "Spike Spiegel", "occupation": "Bounty Hunter", "avatar": "http://vignette4.wikia.nocookie.net/deadliestfiction/images/d/de/Spike_Spiegel_by_aleztron.jpg/revision/latest?cb=20130920231337" }, { - "_id": 3, + "id": 3, "name": "Wirt", "occupation": "adventurer", "avatar": "http://66.media.tumblr.com/5ea59634756e3d7c162da2ef80655a39/tumblr_nvasf1WvQ61ufbniio1_400.jpg" }, { - "_id": 4, + "id": 4, "name": "Michael Myers", "occupation": "Loving little brother", "avatar": "http://vignette2.wikia.nocookie.net/villains/images/e/e3/MMH.jpg/revision/latest?cb=20150810215746" }, { - "_id": 5, + "id": 5, "name": "Dana Scully", "occupation": "FBI Agent", "avatar": "https://pbs.twimg.com/profile_images/718881904834056192/WnMTb__R.jpg"