Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
"start": "nodemon ./bin/www"
},
"dependencies": {
"cookie-parser": "~1.4.4",
Expand Down
51 changes: 38 additions & 13 deletions src/routes/pokemon.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,31 +7,56 @@ router.get("/", function (req, res, next) {
res.json(pokedex);
});

/* GET Pokemon by HP */
router.get("/hp", function (req, res, next) {
const queryKeys = Object.keys(req.query)
if (queryKeys.length > 1 || !queryKeys.length) res.status(404).json({ error: "Not found" });
let predicate;
switch (queryKeys[0]) {
case 'gt': predicate = pokemon => pokemon.base.HP > req.query["gt"];
break;
case 'lt': predicate = pokemon => pokemon.base.HP < req.query["lt"];
break;
case 'gte': predicate = pokemon => pokemon.base.HP > req.query["gte"];
break;
case 'lte': predicate = pokemon => pokemon.base.HP < req.query["lte"];
break;
default: res.status(400).json({ error: 'Invalid Operator. Must be one of ["gt","gte","lt","lte"]' })
break;
}
const searchResults = pokedex.filter(predicate);
res.status(200).json(searchResults)
return;
});

/* GET Pokemon by Id. */
router.get("/:id", function (req, res, next) {
// TODO: Implement this route. See swagger docs for details, by visiting http://localhost:3000/api-docs
res.status(501).json({ message: "Not Implemented" });
try {
const id = parseInt(req.params.id);
const searchResult = pokedex.find(pokemon => pokemon.id === id);
if (searchResult) res.status(200).json(searchResult);
else res.status(404).json({ error: "Not found" });
} catch (e) {
res.status(400).json({ error: "Invalid ID" });
}
return;
});

/* GET Pokemon by English Name */
router.get("/name/:name", function (req, res, next) {
// TODO: Implement this route. See swagger docs for details, by visiting http://localhost:3000/api-docs
res.status(501).json({ message: "Not Implemented" });
const name = req.params.name.toLowerCase();
const searchResult = pokedex.find(pokemon => `${pokemon.name.english}`.toLowerCase() == name);
if (searchResult) res.status(200).json(searchResult);
else res.status(404).json({ error: "Not found" });
return;
});

/* GET Pokemon by Type */
router.get("/type/:type", function (req, res, next) {
// TODO: Implement this route. See swagger docs for details, by visiting http://localhost:3000/api-docs
res.status(501).json({ message: "Not Implemented" });
return;
});

/* GET Pokemon by HP */
router.get("/hp", function (req, res, next) {
// TODO: Implement this route. See swagger docs for details, by visiting http://localhost:3000/api-docs
res.status(501).json({ message: "Not Implemented" });
const qType = req.params.type.toLowerCase();
const searchResults = pokedex.filter(pokemon => pokemon.type.find(type => type.toLowerCase() === qType));
if (searchResults.length) res.status(200).json(searchResults);
else res.status(400).json({ error: "Bad request" });
return;
});

Expand Down