Giter VIP home page Giter VIP logo

nodejs-storemanager's Introduction

Projeto NodeJs - Store Manager

NodeJs-API-REST Logo

📖 Tabela de Conteúdos

Tabela de conteúdos
  1. ➤ Sobre o projeto
  2. ➤ Tecnologias utilizadas
  3. ➤ Descrição do projeto
  4. ➤ Instruções
  5. ➤ Requisitos realizados
  6. ➤ Requisito 1: Criação de endpoints para listar produtos
  7. ➤ Requisito 2: Desenvolvimento de testes para cobertura de 5%
  8. ➤ Requisito 3: Criação de endpoint para cadastrar produtos
  9. ➤ Requisito 4: Criação de validações para produtos
  10. ➤ Requisito 5: Desenvolvimento de testes para cobertura de 10%
  11. ➤ Requisito 6: Criação de endpoint para validar e cadastrar vendas
  12. ➤ Requisito 7: Desenvolvimento de testes para cobertura de 15%
  13. ➤ Requisito 8: Criação de endpoints para listar vendas
  14. ➤ Requisito 9: Desenvolvimento de testes para cobertura de 20%
  15. ➤ Requisito 10: Criação de endpoint para atualizar um produto
  16. ➤ Requisito 11: Desenvolvimento de testes para cobertura de 25%
  17. ➤ Requisito 12: Criação de endpoint para deletar um produto
  18. ➤ Requisito 13: Desenvolvimento de testes para cobertura de 30%
  19. ➤ Requisito 14: Criação de endpoint para deletar uma venda
  20. ➤ Requisito 15: Desenvolvimento de testes para cobertura de 35%
  21. ➤ Requisito 16: Criação de endpoint para atualizar uma venda
  22. ➤ Requisito 17: Desenvolvimento de testes para cobertura de 40%
  23. ➤ Requisito 18: Criação de endpoint para busca de produtos por termo
  24. ➤ Requisito 19: Desenvolvimento de testes para cobertura de 50%
  25. ➤ Requisito 20: Desenvolvimento de testes para cobertura de 60%
  26. ➤ Créditos

📝 Sobre o projeto

Projeto desenvolvido durante a formação de BackEnd na Trybe com o intuito de consolidar o aprendizado de NodeJs, utilizando o padrão de arquitetura MSC e o padrão arquitetural de APIs REST, bem como o framework de testes Mocha junto às libraries Chai e Sinon.

Arquitetura MSC

💻 Tecnologias utilizadas

Docker Logo VS Code Logo gitHub Logo MySQL Logo
NodeJs Logo Nodemon Logo Mocha Logo Chai Logo Sinon Logo
Express Logo Joi Logo Rest Logo

📄 Descrição

Descrição
Foi construída uma API para funcionar como um sistema de gerenciamento de vendas no formato dropshipping, no qual é possível criar, visualizar, deletar e atualizar produtos e vendas. Tem-se os arquivos (`migration.sql` e `seed.sql`) que foram utilizados para criação e população do banco de dados.

Neste projeto eu realizei:

  1. Utilização do banco de dados MySQL para gestão de dados
  2. Construção de um CRUD onde o usuário não depende de cadastro para interagir
  3. Validação de dados enviados nas requisições para alterar ou cadastrar vendas e produtos
  4. Utilização do padrão REST para garantir que: os endpoints sempre retornem respostas com códigos de status corretos, os verbos http são adequados para cada operação e, as URLs estão agrupadas e padronizadas em cada recurso
  5. Utilização da arquitetura MSC para garantir que: o banco de dados seja acessado somente pelo Model, que o Service seja responsável pelas regras de negócio e, que o Controller seja responsável por receber as requisições e enviar as respostas

Durante o desenvolvimento foi utilizado Docker para evitar a restauração manual do banco de dados.

📜 Instruções

  1. Clone o repositório
  • git clone [email protected]:Gabrielle-Murat/NodeJs-StoreManager.git
  • Entre na pasta do repositório que você acabou de clonar;

  1. Instale as dependências:
  • npm install

  1. Como restaurar o banco de dados, se necessário:
  • Abra o MySQL Workbench,
  • Abra uma nova aba de query e cole dentro dela todo o conteúdo dos arquivos: migration.sql e, logo abaixo, seed.sql,
  • Execute a query e aguarde alguns segundos,
  • Atualize a lista de dbs;

  1. Utilizando Docker:
  • Rode os serviços node e db com o comando docker-compose up -d (adapte a porta padrão, se necessário),
  • Com isso, serão inicializados dois containers: store_manager e store_manager_db
  • Use o comando docker exec -it store_manager bash (para acessar o terminal interativo do container store_manager),
  • As credenciais de acesso ao db estão definidas no arquivo docker-compose.yml, sendo acessíveis no container através das variáveis de ambiente MYSQL_USER e MYSQL_PASSWORD
  • Instale as dependências com npm install
  • Todos os comandos disponíveis no package.json agora podem ser executados no terminal do container

  1. Configurando as variáveis de ambiente:
  • Cria um arquivo .env na raiz do projeto com as variáveis de ambiente
  • O arquivo terá o seguinte formato:
      MYSQL_HOST=localhost
      MYSQL_USER=nome
      MYSQL_PASSWORD=senha
      MYSQL_DATABASE=StoreManager
      PORT=portaParaConexãoComOServidor
  • As variáveis de ambiente já estão configuradas no arquivo connection.js na pasta models;

  1. Para iniciar o servidor em modo de desenvolvimento:
  • Execute o comando: npm run debug

👩‍💻 Requisitos Realizados:

Criação de API:

Requisito 1: Criação de endpoints para listar produtos

1. Criar dois endpoints para listar: todos os produtos e, o produto baseado no id da rota:
  1.1. Listar todos os produtos através do caminho `/products`.
  1.2. Listar apenas o produto com o `id` presente na rota através do caminho `/products/:id`.
  1.3. Listar o resultado de forma crescente pelo campo `id`.

Requisito 2: Desenvolvimento de testes para cobertura de 5%

2. Desenvolver testes para cobrir 5% de cada camada da aplicação:
  2.1. Os testes da camada model devem mockar o db.

Requisito 3: Criação de endpoint para cadastrar produtos

3. Criar um endpoint para cadastrar produtos:
  3.1. Cadastrar produtos através do caminho `/products`.
  3.2. Os produtos devem ser salvos na tabela correta do db.
  3.3. O corpo da requisição deve conter o campo `name`

Requisito 4: Criação de validações para produtos

4. Validar o campo `name` recebido no corpo da requisição:
  4.1. As validações devem retornar os status corretos e suas respectivas mensagens de erros.
  4.2. Não deve ser possível realizar operações em um produto sem o campo `name`.
  4.3. O campo `name` deve possuir ao menos 5 caracteres.

Requisito 5: Desenvolvimento de testes para cobertura de 10%

5. Desenvolver testes para cobrir 10% de cada camada da aplicação:
  5.1. Os testes da camada model devem mockar o db.

Requisito 6: Criação de endpoint para validar e cadastrar vendas

6. Criar um endpoint para cadastrar vendas:
  6.1. Cadastrar vendas através do caminho `/sales`.
  6.2. As vendas enviadas devem ser salvas nas tabelas: `sales` e `sales_products` do db.
  6.3. Deve ser possível cadastrar a venda de vários produtos na mesma requisição.
  6.4. O corpo da requisição deve conter um array de objetos, onde cada objeto representa um produto.
  6.5. Cada objeto possui as seguintes chaves: `productId` e `quantity`.
  6.6. Não deve ser possível realizar operações em uma venda sem os campos `productId` e `quantity`.
  6.7. O campo `quantity` deve ser maior que zero.
  6.8. Não deve ser possível realizar operações em uma venda se o campo `id` não existir no db.

Requisito 7: Desenvolvimento de testes para cobertura de 15%

7. Desenvolver testes para cobrir 15% de cada camada da aplicação:
  7.1. Os testes da camada model devem mockar o db.

Requisito 8: Criação de endpoints para listar vendas

8. Criar dois endpoints para listar: todos os produtos e, o produto baseado no id da rota:
  8.1. Listar todos as vendas através do caminho `/sales`.
  8.2. Listar apenas a venda com o `id` presente na rota através do caminho `/sales/:id`.
  8.3. Listar o resultado de forma crescente pelo campo `saleId`.
  8.4. Em caso de empate: listar de forma crescente pelo campo `productId`.

Requisito 9: Desenvolvimento de testes para cobertura de 20%

9. Desenvolver testes para cobrir 20% de cada camada da aplicação:
  9.1. Os testes da camada model devem mockar o db.

Requisito 10: Criação de endpoint para atualizar um produto

10. Criar um endpoint para atualizar um produto baseado no id da rota:
  10.1. Atualizar produtos através do caminho `/products/:id`.
  10.2. O corpo da requisição deve conter o campo `name`.
  10.3. Validar o corpo da requisição assim como no cadastro.
  10.4. Não deve ser possível alterar um produto que não existe no db.

Requisito 11: Desenvolvimento de testes para cobertura de 25%

11. Desenvolver testes para cobrir 25% de cada camada da aplicação:
  11.1. Os testes da camada model devem mockar o db.

Requisito 12: Criação de endpoint para deletar um produto

12. Criar um endpoint para deletar um produto baseado no id da rota:
  12.1. Deletar produtos através do caminho `/products/:id`.
  12.2. Não deve ser possível deletar um produto inexistente no db.

Requisito 13: Desenvolvimento de testes para cobertura de 30%

13. Desenvolver testes para cobrir 30% de cada camada da aplicação:
  13.1. Os testes da camada model devem mockar o db.

Requisito 14: Criação de endpoint para deletar uma venda

14. Criar um endpoint para deletar uma venda baseado no id da rota:
  12.1. Deletar vendas através do caminho `/sales/:id`.
  12.2. Não deve ser possível deletar uma venda inexistente no db.

Requisito 15: Desenvolvimento de testes para cobertura de 35%

15. Desenvolver testes para cobrir 35% de cada camada da aplicação:
  15.1. Os testes da camada model devem mockar o db.

Requisito 16: Criação de endpoint para atualizar uma venda

16. Criar um endpoint para atualizar uma venda baseado no id da rota:
  10.1. Atualizar vendas através do caminho `/sales/:id`.
  10.2. O corpo da requisição deve conter um array de objetos, onde cada objeto representa um produto.
  10.3. Cada objeto possui as seguintes chaves: `productId` e `quantity`.
  10.4. O corpo da requisição deve ser validado assim como no cadastro.
  10.5. Não deve ser possível alterar uma venda que não existe no db.

Requisito 17: Desenvolvimento de testes para cobertura de 40%

17. Desenvolver testes para cobrir 40% de cada camada da aplicação:
  17.1. Os testes da camada model devem mockar o db.

Requisito 18: Criação de endpoint para busca de produtos por termo

18. Criar um endpoint para buscar produtos baseados no queryTerm, se existirem.
  18.1. Procurar produtos através do caminho `/products/search`.
  18.2. Deve ser retornado um array de produtos que contenham em seu nome o termo passado na URL.
  18.3. Caso nenhum produto seja encontrado, deve ser retornado um array vazio.
  18.4. Se nenhum termo for passado, deve ser retornado um array contendo todos os produtos.

Requisito 19: Desenvolvimento de testes para cobertura de 50%

19. Desenvolver testes para cobrir 50% de cada camada da aplicação:
  19.1. Os testes da camada model devem mockar o db.

Requisito 20: Desenvolvimento de testes para cobertura de 60%

20. Desenvolver testes para cobrir 60% de cada camada da aplicação:
  20.1. Os testes da camada model devem mockar o db.

💳 Créditos

Arquivo de seed (seed.sql), migration (migration.sql), docker (Dockerfile) e docker compose (docker-compose.yml) fornecidos pela Trybe.

Trybe Logo

nodejs-storemanager's People

Contributors

gabrielle-murat avatar trybe-tech-ops avatar

Watchers

 avatar

Forkers

kooyain

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.