Skip to content

API NPS desenvolvida no evento Next Level Week 4, disponibilizado pela Rocketseat entre os dias 22/02 à 28/02 de 2021. Trilha percorrida: Node.js

License

Notifications You must be signed in to change notification settings

RandelSouza/next-level-week-4

Repository files navigation

🚀 Next Level Week 04 | Node.js | API | Envio de e-mail para Pesquisa de Satisfação Utilizando o Calculo do NPS 🚀

Next Level Week 04

©️ Licença | 📁 Dependências

GitHub LICENSE GitHub package.yaml dependency express GitHub package.yaml dependency express-async-errors GitHub package.yaml dependency handlebarsjs GitHub package.yaml dependency nodemailer GitHub package.yaml dependency reflect-metadata GitHub package.yaml dependency sqlite3 GitHub package.yaml dependency version (prod) GitHub package.yaml dependency version (prod) GitHub package.yaml dependency version (prod)


Descrição do ProjetoFuncionalidadesTestando a APIComo RodarConsiderações FinaisAutorLicença


✒️ Descrição do Projeto

  • O Net Promoter Score (NPS) é uma métrica que objetiva medir o grau de satisfação e lealdade dos clientes com as empresas. Organizações de todos os portes e lugares do mundo utilizam o NPS por ser um método prático e eficaz durante as pesquisas periódicas realizadas com seus clientes.

  • O índice é avaliado de acordo com a resposta de uma única pergunta, como por exemplo a seguinte: Em uma escala de 0 a 10, o quanto você indicaria a Rocketseat para um amigo?.

  • A questão da pesquisa é uma pergunta chave, pois pressupõe que ninguém indicaria algo ruim para um amigo. A resposta quantitativa de 0 a 10 viabiliza o calculo do NPS.

  • Após o cliente dar sua nota, eles serão classificados da seguinte maneira.

    • Clientes detratores (detractors): notas de 0-6.
      • clientes totalmente insatisfeitos 😞.
    • Clientes neutros (passives): notas de 7-8.
      • clientes com satisfação média 😐.
    • Clientes promotores (promoters): notas de 9-10.
      • clientes totalmente satisfeitos 😃.

    Imagem detratores, neutros e promotores
  • Cálculo do NPS:
    • Onde:

      • detratores = total de clientes que deram notas de 0-6.
      • neutros = total de clientes que deram notas de 7-8.
      • promotores = total de clientes que deram notas de 9-10.
      • respondentes = detratores + neutros + promotores.

      Obs.: Os neutros não entram diretamente no cálculo, somente para o total de respondentes.



    • Zona de classificação do NPS:

      • Excelência: pontuação entre 75% e 100% 🏆.
      • Qualidade: pontuação entre 50% e 74% 🎉.
      • Aperfeiçoameto: pontuação entre 0% e 49% 🔧.
      • Critica: pontuação entre -100% e -1% 📉.

Fonte: https://www.dds.com.br/blog/index.php/entenda-importancia-nps-para-sua-empresa/. Acessado em 04/03/2021.

🔩 Funcionalidades

O servidor ficará ouvindo requisições na URL: http://localhost:3333/

  • Criar Usuário.

    • URL: http://localhost:3333/users.
    • Verbo HTTP: POST.
    • Corpo HTTP:
      {
          "name": "User example create",
          "email": "user_example@test.com.br"           
      }
    • EndPoint:
      router.post("/users", userController.create);
    • Resposta:
      {
          "id": "7baeed55-554a-44ec-8a27-9d131542dca11",
          "name": "User example create",
          "email": "user_example@test.com.br",
          "created_at": "2021-02-06T15:18:13.000Z"
      }
      
  • Listar Usuários

    • URL: http://localhost:3333/users.

    • Verbo HTTP: GET.

    • EndPoint:

          router.get("/users", userController.show);
    • Resposta:

        [
            {
                "id": "7baeed55-554a-44ec-8a27-9d131542dca11",
                "name": "User example create",
                "email": "user_example@test.com.br",
                "created_at": "2021-02-06T15:18:13.000Z"            
            }
        ]
  • Atualizar Usuário

    • URL: http://localhost:3333/users/${user_id}.

      • Exemplo: http://localhost:3333/users/7baeed55-554a-44ec-8a27-9d131542dca11.
    • Verbo HTTP: PUT

    • Corpo HTTP:

         {
             "name": "User example update",
             "email": "user_example@test.com.br"
         }     
    • EndPoint:

      router.put("/users/:user_id", (request: Request, response: Response) => userController.update(request, response));
    • Resposta:

        {
            "id": "7baeed55-554a-44ec-8a27-9d131542dca11",
            "name": "User example update",
            "email": "user_example@test.com.br",
            "created_at": "2021-02-26T18:13:03.000Z"
        }
  • Deletar Usuário

  • URL: http://localhost:3333/users/${user_id}.
    • Exemplo: http://localhost:3333/users/7baeed55-554a-44ec-8a27-9d131542dca11.
    • Verbo HTTP: DELETE
  • Criar uma nova pesquisa.

    • URL: http://localhost:3333/surveys.

    • Verbo HTTP: POST.

    • Corpo HTTP:

      {
         "title": "Pesquisa de opinião!",
         "description": "De 0 a 10 quanto você recomendaria a Rocketseat para um amigo?"
      }          
    • EndPoint:

      router.post("/surveys", surveyController.create);
    • Resposta:

      {
          "id": "f58bd1f0-3a06-44a0-87fb-34d137030676",
          "title": "Pesquisa de opinião",
          "description": "De 0 a 10 quanto você recomendaria a Rocketseat para um amigo?",
          "created_at": "2021-03-06T15:35:23.000Z"
      }
  • Mostrar as pesquisas criadas.

    • URL: http://localhost:3333/users.

    • Verbo HTTP: GET.

    • EndPoint:

      router.get("/surveys", surveyController.show);    
    • Resposta:

    [
        {
            "id": "f58bd1f0-3a06-44a0-87fb-34d137030676",
            "title": "Pesquisa de opinião",
            "description": "De 0 a 10 quanto você recomendaria a Rocketseat para um amigo?",
            "created_at": "2021-03-06T15:35:23.000Z"
        }
    ]
  • Enviar email para um determinado usuário.

    • URL: http://localhost:3333/sendMail.

    • Verbo HTTP: POST.

    • Corpo HTTP:

      {  
          "email": "user_example@test.com.br",
          "survey_id": "f58bd1f0-3a06-44a0-87fb-34d137030676"
      }
    • EndPoint:

      router.post("/sendMail", sendEmailController.execute);
    • Resposta:

      {
          "id": "653badbb-8294-45d0-851b-253561d54efa",
          "user_id": "7baeed55-554a-44ec-8a27-9d131542dca11",
          "survey_id": "f58bd1f0-3a06-44a0-87fb-34d137030676",
          "created_at": "2021-03-06T17:41:39.000Z"
      }
  • Cadastrar nota do usuário.

    • URL: http://localhost:3333/answers/${nota}?u=${survey_user_id}.

      • Exemplo: http://localhost:3333/answers/10?u=653badbb-8294-45d0-851b-253561d54efa.
    • Verbo HTTP: GET.

    • EndPoint:

      router.get("/answers/:value", answerController.execute);
    • Resposta:

      {
          "id": "653badbb-8294-45d0-851b-253561d54efa",
          "user_id": "532040d6-527b-43ca-8a0e-3c28a126472e",
          "survey_id": "6ef98252-cd36-466e-876e-17722479ff55",
          "value": 10,
          "created_at": "2021-03-06T17:41:39.000Z"
      }
  • Calcular o NPS de uma determinada pesquisa.

    • URL: .localhost:3333/nps/${survey_id}

      • Exemplo: localhost:3333/nps/f58bd1f0-3a06-44a0-87fb-34d137030676.
    • Verbo HTTP: GET.

    • EndPoint:

      router.get("/nps/:survey_id", npsController.execute); 
    • Resposta:

      {
          "detractors": 0,
          "promoters": 1,
          "passive": 0,
          "totalAnswer": 1,
          "nps": 100.00
      }

💻 Testando a API

▶️ Como Rodar

# Instalar as depêndencias
npm install

# Rodar os testes
npm run test

# Rodar o projeto
npm run dev

✳️ Considerações Finais

🔎 Autor

Autor: Randel Souza Almeida

Randel Souza Almeida

Linkdin Badge Link Gmail Badge Link

©️ Licença

Este projeto detém a Licença MIT

  • Exigido

    • ℹ️ Aviso de licença e direitos autorais: inclua uma cópia da licença e aviso de direitos autorais com o código.
  • Permitido

    • ✔️ Uso comercial: o software e seus derivados podem ser utilizados para fins comerciais.
    • ✔️ Modificação: o software pode ser modificado.
    • ✔️ Distribuição: o software pode ser destribuido.
    • ✔️ Sublicenciamento: Pode-se conceder uma sublicença para modificar e distribuir o software a terceiros não incluídos na licença.
  • Proibido

    • ✖️ Responsabilidade Assegurada: O software é fornecido sem garantia e o autor/licença do software não pode ser responsabilizado por perdas e danos.

Descrição do ProjetoFuncionalidadesTestando a APIComo RodarConsiderações FinaisAutorLicença


About

API NPS desenvolvida no evento Next Level Week 4, disponibilizado pela Rocketseat entre os dias 22/02 à 28/02 de 2021. Trilha percorrida: Node.js

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published