diff --git a/lib/controllers/ExplorerController.js b/lib/controllers/ExplorerController.js index 85590a6d..7853e4bb 100644 --- a/lib/controllers/ExplorerController.js +++ b/lib/controllers/ExplorerController.js @@ -2,25 +2,31 @@ const ExplorerService = require("../services/ExplorerService"); const FizzbuzzService = require("../services/FizzbuzzService"); const Reader = require("../utils/reader"); -class ExplorerController{ - static getExplorersByMission(mission){ - const explorers = Reader.readJsonFile("explorers.json"); - return ExplorerService.filterByMission(explorers, mission); - } +class ExplorerController { + static getExplorersByMission(mission) { + const explorers = Reader.readJsonFile("explorers.json"); + return ExplorerService.filterByMission(explorers, mission); + } - static applyFizzbuzz(score){ - return FizzbuzzService.applyValidationInNumber(score); - } + static applyFizzbuzz(score) { + return FizzbuzzService.applyValidationInNumber(score); + } - static getExplorersUsernamesByMission(mission){ - const explorers = Reader.readJsonFile("explorers.json"); - return ExplorerService.getExplorersUsernamesByMission(explorers, mission); - } + static getExplorersUsernamesByMission(mission) { + const explorers = Reader.readJsonFile("explorers.json"); + return ExplorerService.getExplorersUsernamesByMission(explorers, mission); + } - static getExplorersAmonutByMission(mission){ - const explorers = Reader.readJsonFile("explorers.json"); - return ExplorerService.getAmountOfExplorersByMission(explorers, mission); - } + static getExplorersAmonutByMission(mission) { + const explorers = Reader.readJsonFile("explorers.json"); + return ExplorerService.getAmountOfExplorersByMission(explorers, mission); + } + + static getExplorersByStack(stack) { + const explorers = Reader.readJsonFile("explorers.json"); + const resultado = ExplorerService.getExplorersByStack(explorers, stack); + return resultado; + } } module.exports = ExplorerController; diff --git a/lib/server.js b/lib/server.js index 9860b437..193394fc 100644 --- a/lib/server.js +++ b/lib/server.js @@ -1,38 +1,52 @@ const ExplorerController = require("./controllers/ExplorerController"); const express = require("express"); +const { query } = require("express"); const app = express(); app.use(express.json()); const port = 3000; app.get("/", (request, response) => { - response.json({message: "FizzBuzz Api welcome!"}); + response.json({ message: "FizzBuzz Api welcome!" }); }); app.get("/v1/explorers/:mission", (request, response) => { - const mission = request.params.mission; - const explorersInMission = ExplorerController.getExplorersByMission(mission); - response.json(explorersInMission); + const mission = request.params.mission; + const explorersInMission = ExplorerController.getExplorersByMission(mission); + response.json(explorersInMission); }); app.get("/v1/explorers/amount/:mission", (request, response) => { - const mission = request.params.mission; - const explorersAmountInMission = ExplorerController.getExplorersAmonutByMission(mission); - response.json({mission: request.params.mission, quantity: explorersAmountInMission}); + const mission = request.params.mission; + const explorersAmountInMission = + ExplorerController.getExplorersAmonutByMission(mission); + response.json({ + mission: request.params.mission, + quantity: explorersAmountInMission, + }); }); app.get("/v1/explorers/usernames/:mission", (request, response) => { - const mission = request.params.mission; - const explorersUsernames = ExplorerController.getExplorersUsernamesByMission(mission); - response.json({mission: request.params.mission, explorers: explorersUsernames}); + const mission = request.params.mission; + const explorersUsernames = + ExplorerController.getExplorersUsernamesByMission(mission); + response.json({ + mission: request.params.mission, + explorers: explorersUsernames, + }); }); app.get("/v1/fizzbuzz/:score", (request, response) => { - const score = parseInt(request.params.score); - const fizzbuzzTrick = ExplorerController.applyFizzbuzz(score); - response.json({score: score, trick: fizzbuzzTrick}); + const score = parseInt(request.params.score); + const fizzbuzzTrick = ExplorerController.applyFizzbuzz(score); + response.json({ score: score, trick: fizzbuzzTrick }); }); -app.listen(port, () => { - console.log(`FizzBuzz API in localhost:${port}`); +app.get("/v1/explorers/stack/:stack", (request, response) => { + const stack = request.params.stack; + const explorersByStack = ExplorerController.getExplorersByStack(stack); + response.json({ stack: stack, stacks: explorersByStack }); }); +app.listen(port, () => { + console.log(`FizzBuzz API in localhost:${port}`); +}); diff --git a/lib/services/ExplorerService.js b/lib/services/ExplorerService.js index 9fef9574..3a4b8b49 100644 --- a/lib/services/ExplorerService.js +++ b/lib/services/ExplorerService.js @@ -1,21 +1,46 @@ +const { text } = require("express"); + class ExplorerService { + static filterByMission(explorers, mission) { + const explorersByMission = explorers.filter( + (explorer) => explorer.mission == mission + ); + return explorersByMission; + } - static filterByMission(explorers, mission){ - const explorersByMission = explorers.filter((explorer) => explorer.mission == mission); - return explorersByMission; - } + static filterByStack(explorers, stack) { + const explorersByStack = explorers.filter((explorer) => + explorer.stacks.includes(stack) + ); + return explorersByStack; + } - static getAmountOfExplorersByMission(explorers, mission){ - const explorersByMission = ExplorerService.filterByMission(explorers, mission); - return explorersByMission.length; - } + static getAmountOfExplorersByMission(explorers, mission) { + const explorersByMission = ExplorerService.filterByMission( + explorers, + mission + ); + return explorersByMission.length; + } - static getExplorersUsernamesByMission(explorers, mission){ - const explorersByMission = ExplorerService.filterByMission(explorers, mission); - const explorersUsernames = explorersByMission.map((explorer) => explorer.githubUsername); - return explorersUsernames; - } + static getExplorersUsernamesByMission(explorers, mission) { + const explorersByMission = ExplorerService.filterByMission( + explorers, + mission + ); + const explorersUsernames = explorersByMission.map( + (explorer) => explorer.githubUsername + ); + return explorersUsernames; + } + static getExplorersByStack(explorers, stack) { + const explorersByStack = ExplorerService.filterByStack(explorers, stack); + const explorersName = explorersByStack.map( + (explorer) => explorer.name + ": " + explorer.stacks + ); + return explorersName; + } } module.exports = ExplorerService; diff --git a/test/controllers/ExplorerController.test.js b/test/controllers/ExplorerController.test.js new file mode 100644 index 00000000..33e72608 --- /dev/null +++ b/test/controllers/ExplorerController.test.js @@ -0,0 +1,7 @@ +const ExplorerController = require("./../../lib/controllers/ExplorerController"); +describe("Test para ExplorerController", () => { + test("1) Filtrar por stack", () => { + const respuesta = ExplorerController.getExplorersByStack("javascript"); + expect(respuesta[0]).toMatch("javascript"); + }); +});