Giter Site home page Giter Site logo

joussemarborges / api_store_manager Goto Github PK

View Code? Open in Web Editor NEW

This project forked from guilherme-artigas/api_store_manager

0.0 0.0 0.0 278 KB

Foi um desafio que tivemos 5 dias para desenvolver do zero uma API para gerenciamento de uma loja, que manipulava 2 rotas e 3 tabelas do banco de dados, aplicando padrões arquiteturais e conhecimentos em REST, totalmente coberta com testes unitários, para garantir a saúde da aplicação.

JavaScript 100.00%

api_store_manager's Introduction

Projeto Store Manager

Olá, seja bem vindo ao repositório do projeto Store Manager, esse projeto foi desenvolvido por mim Guilherme Artigas de forma individual enquanto aluno da Trybe, no módulo de back-end do curso.

Foi um desafio que tivemos 5 dias para desenvolver do zero uma API para gerenciamento de uma loja, que manipulava 2 rotas e 3 tabelas do banco de dados, aplicando padrões arquiteturais e conhecimentos em REST, totalmente coberta com testes unitários, para garantir a saúde da aplicação.

Algumas características da API

  • endpoint para listar produtos método GET rota /products;
  • endpoint para cadastrar produtos método POST na rota /products;
    • Os produtos enviados são salvos na tabela products do banco de dados
    • O corpo da requisição deve ser em formato JSON seguindo a seguinte estrutura:
      {
        "name": "Produto exemplo"
      }
    • Se o produto foi cadastrado com sucesso o retorno é um status http 201, no seguinte formato:
      {
        "id": 4,
        "name": "Produto exemplo",
      }
    • Existem validações nessa rota para que os produtos sejam obrigatoriamente cadastrados com name maior ou igual a 5 caracteres.

  • endpoint para cadastrar vendas através do método POST na rota /sales;
    • As vendas cadastradas são salvas na tabela sales do banco de dados
    • O corpo da requisição deve ser em formato JSON seguindo a seguinte estrutura:
      [
        {
          "productId": 1,
          "quantity": 10,
        },
        {
          "productId": 2,
          "quantity": 3,
        },
      ]
    • Se a requisição não tiver o campo name, o resultado retornado é um status http 400: { "message": '"name" is required' }
    • Se a requisição não tiver name com pelo menos 5 caracteres, o resultado retornado é um status http 422: { "message": '"name" length be at least 5 characters long' }

  • endpoint para cadastrar vendas método POST rota /sales
    • Se algum dos itens da requisição não tiver o campo productId, o resultado retornado é um status http 400: { "message": '"productId" is required' }
    • Se algum dos itens da requisição não tiver o campo quantity, o resultado retornado é um status http 400: { "message": '"quantity" is required' }
    • Se a requisição tiver algum item em que o campo quantity seja menor ou igual a zero, o resultado retornado é um status http 422: { "message": '"quantity" must be greater than or equal to 1' }
    • Se o campo productId do item da requisição não existir no banco de dados, o resultado retornado é um status http 404: { "message": '"Product not found"' }
    • Em casos de cadastro de vendas com sucesso o retorno é um status http 201.

  • endpoint para listar vendas método GET rota /sales e /sales/:id
    • É possível listar todas as vendas;
    • É possível listar todas as vendas passando um id;

Tecnologias utilizadas no desenvolvimento 👨🏼‍💻

JavaScript NodeJS Express.js MySQL Mocha Git

Passo a Passo para rodar o projeto localmente na sua máquina

Passo 1 - Clone o repositório com o comando...

git clone [email protected]:Guilherme-Artigas/Store_Manager.git && cd Store_Manager

É necessário ter o docker e o docker compose instalados!

  • Verifique se o docker está instalado com o comando docker --version
  • Verifique se o docker compose está instalado com o comando docker-compose --version

Passo 2 - Instalar as dependências do projeto com o comando...

npm install

Passo 3 - Renomeio o arquivo .env-example para .env

Passo 4 - Subindo os containers necessários com o comando...

docker-compose up -d

Passo 5 - Criar e popular o banco de dados com o comando...

npm run migration && npm run seed

Passo 6 - Entrando no terminal interativo do container docker com o comando...

docker exec -it store_manager bash

Passo 7 - Subindo o servidor com o comando...

npm run debug

Pronto! Com o servidor rodando na porta 3000 é possível testar requisições do tipo GET, POST, PUT, DELETE, através de um cliente como o thunder client por exemplo.

Obrigado pela visita!

api_store_manager's People

Contributors

guilherme-artigas avatar trybe-tech-ops avatar

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.