DEV Community

Renato Rebouças
Renato Rebouças

Posted on • Edited on

Teste backend pokémon pt 2

Teste back-end pokémon pt 2

Bom no ultimo artigo, finalizamos a estrutura padrão do nosso projeto, pra quem não viu vou deixar o link, pois é essencial ter lido ele para avançar nesse artigo.

Teste backend pokémon pt 1 - DEV

Vou partir do principio que você já leu o ultimo artigo e seu projeto está igual o meu, agora vamos iniciar nossa estrutura de rotas para podermos criar nossa primeira controler.

Na raiz do seu projeto crie um arquivo routes.js, nele vamos colocar o código a baixo:

const bodyParser = require("body-parser");

module.exports = (app) => {
  // usamos o body-parser para lidar com as requisiçoes json
  app.use(bodyParser.json());


   // o primeiro parametro fa função get é a rota que iremos 
   // chamar na url o segundo já é uma função anônima, mas
   // nada impede de ser passado uma função  já criada
  app.get("/", (req, res) => {
    res.status(200).send({ message: "boas-vindas a API Pokémon GO" });
  });

};
Enter fullscreen mode Exit fullscreen mode

Vamos voltar agora para nosso primeiro arquivo criado o index.js nele vamos informar o express que iremos usar nosso arquivo de rotas

// infromamos o path do nosse arquivo de rotas
const routes = require("./routes");

//nosso arquivo ficara assim logo depois de instanciar as 
//depêndencias nele


app.use(cors());
app.use(express.json());

const port = 3333;

// disponibiliza as rotas no arquivo base
routes(app);

app.listen(port, () => {
  console.log(`Servidor rodando na porta: ${port}`);
});
Enter fullscreen mode Exit fullscreen mode

Agora criaremos nossa primeira controller para isso crie uma pasta chamada controller e dentro dela um arquivo chamado CsvController.js.

Antes vamos instalar uma depencia para manipularmos arquivos csv ou xlsx, para isso digitamos em nosso terminal o seguinte comando:

npm i node-xlsx
Enter fullscreen mode Exit fullscreen mode

Voltando na nossa controller vamos criar uma classe e importar a biblioteca instalada

const xlsx = require("node-xlsx");
class ApiController{

}

// nessa linha exportamos nossa classe como módulo para que 
// ela possa ser acessada de outros lugares
module.exports = ApiController;
Enter fullscreen mode Exit fullscreen mode

Dentro da nossa classe iremos criar uma função chamada importCsv

static async importCsv(req, res) {
  // essa variavel indica o local que esta o arquivo csv, deixei
  // o meu de exemplo mais depois do ${__dirname} passe o seu caminho
  // vou deixar logo a baixo o repositório novamente com o xlsx
    const plan = xlsx.parse(`${__dirname}/../api/PokemonGo.xlsx`);

   // Agora que ja temos nosso arquivo mapeado basta percorrermos ele
   // com um map e criarmos um objeto novo pois os nomes no arquivo
   // contem espaços e caracteres especiais depios batas tertornar ele 
  // e termos acesso deles na variavel readPlan

    const readPlan = plan[0].data.map((data, index) => {

      let dados = {
        row: data[0],
        name: data[1],
        pokedexNumber: data[3],
        imgName: data[4],
        generation: data[5],
        evolutionStage: data[6],
        evolved: data[7],
        familyID: data[8],
        crossGen: data[9],
        type1: data[10],
        type2: data[11],
        weather1: data[12],
        weather2: data[13],
        staTotal: data[14],
        atk: data[15],
        def: data[16],
        sta: data[17],
        legendary: data[18],
        spawns: data[21],
        regional: data[22],
        raidable: data[23],
        hatchable: data[24],
        Shiny: data[25],
        nest: data[26],
        new: data[27],
        notGettable: data[28],
        futureEvolve: data[29],
        CP40: data[30],
        CP39: data[31],
      };
      return dados
    });
   // deletamos o primeir registro do objeto pois ele só 
   //contem o nome das colunas da planilha
    delete readPlan[0];

    // Agora finalmente retornamos os dados para api
    return res.status(200).send(readPlan);
  }
Enter fullscreen mode Exit fullscreen mode

Repositótio do projeto

Nosso código ainda não esta funcionando pois não criamos uma rota para acessar ele, para isso vamos voltar no nosso arquivo que usamos para definilas routes.js

// dentro dele vamos importar nossa controller primeiro
// a minha está no caminho a baixo, mais subistitua por um a sua escolha

const CsvController = require('../Controller/CsvController')

// agora nosso arquivo de rotas ficara assim
module.exports = (app) => {
  app.use(bodyParser.json());
  app.get("/", (req, res) => {
    res.status(200).send({ message: "boas-vindas a API Pokémon GO" });
  });

  // nessa linha adicionaremos nossa nossa nova rota,
  // indicando que ela deverá usar a controller criada anteriormente
  app.get("/import", CsvController.importCsv);

};
Enter fullscreen mode Exit fullscreen mode

Agora basta chamarmos nossa rota, bom como essa é uma rota do tipo get podemos chamar ela pelo navegador pelo endereço https://localhost:3333 , porem eu recomendo o uso do insomnia.

A imagem abaixo é o resultado da nossa requisição.

Alt Text

Top comments (0)