Skip to content

A aplicação se trata de uma API para o gerenciamento de uma loja, onde é possível consultar e cadastrar produtos e vendas.

Notifications You must be signed in to change notification settings

RasecMH/trybe-store-manager

Repository files navigation

Este projeto foi desenvolvido durante o curso de Desenvolvimento Web Full Stack da Trybe com o objetivo de reforçar meus aprendizados de Javascript, Docker, NodeJs, Express, MySQL, Querys SQL, Teste Unitarios, Mocha e Arquitetura MSC.

A aplicação se trata de uma API para o gerenciamento de uma loja, onde é possível consultar e cadastrar produtos e vendas.

Para rodar o projeto:

git clone git@github.com:RasecMH/trybe-store-manager.git
cd trybe-store-manager
  • Localmente (Necessário Node e MySQL instalados na máquina):

    npm install
    
    npm run migration
    
    npm run seed
    
    npm start
    
  • Para rodar os testes:

    npm run test
    
  • Docker (APP_PORT: 3000 | MYSQL_PORT: 3306):

    docker-compose up -d --build
    
    docker exec -it store_manager bash
    
    npm install
    
    npm run migration
    
    npm run seed
    
    npm start
    
  • Para rodar os testes:

    npm run test
    

Rotas

/products

GET
  • Em caso de sucesso retorna com status 200 um array vazio ou:
      [
        {
          "id": 1,
          "name": "Martelo de Thor"
        },
        {
          "id": 2,
          "name": "Traje de encolhimento"
        }
        /* ... */
      ]
POST
  • Corpo da requisição

      {
        "name": "ProdutoX"
      }
  • Em caso de sucesso retorna com status 201:

      {
        "id": 4,
        "name": "ProdutoX"
      }
  • Caso o campo name não exista na requisição ou esteja vazio retorna com status 400:

      { "message": "\"name\" is required" }
  • Caso o o valor no campo name possua menos de 5 caracteres retorna com status 400:

      { "message": "\"name\" length must be at least 5 characters long" }

/products/:id

GET
  • Em caso de sucesso retorna com status 200:

      {
        "id": 1,
        "name": "Martelo de Thor"
      }
  • Caso o produto não seja encontrado no banco de dados retorna com status 404:

      { "message": "Product not found" }
PUT
  • Corpo da requisição

      {
        "name": "Martelo do Batman"
      }
  • Em caso de sucesso retorna com status 200:

      {
        "id": 1,
        "name": "Martelo do Batman"
      }
  • Caso o produto não seja encontrado no banco de dados retorna com status 404:

      { "message": "Product not found" }
DELETE
  • Em caso de sucesso retorna status 204.

  • Caso o produto não seja encontrado no banco de dados retorna com status 404:

      { "message": "Product not found" }

/products/search

GET Pesquisa filtra pelo campo name, caso nada seja passado, retorna um array com todos os produtos.
  • Em caso de sucesso retorna com status 200:

      // GET /products/search?q=Martelo
      [
        {
          "id": 1,
          "name": "Martelo de Thor"
        }
      ]
      // GET /products/search?q=
      [
        {
          "id": 1,
          "name": "Martelo de Thor",
        },
        {
          "id": 2,
          "name": "Traje de encolhimento",
        }
        /* ... */
      ]

/sales

GET
  • Em caso de sucesso retorna com status 200 um array vazio ou:
      [
        {
          "saleId": 1,
          "date": "2021-09-09T04:54:29.000Z",
          "productId": 1,
          "quantity": 2
        },
        {
          "saleId": 1,
          "date": "2021-09-09T04:54:54.000Z",
          "productId": 2,
          "quantity": 2
        }
    
        /* ... */
      ]
POST
  • Corpo da requisição

      [
        {
          "productId": 1,
          "quantity": 1
        },
        {
          "productId": 2,
          "quantity": 5
        }
      ]
  • Em caso de sucesso retorna com status 201:

      {
        "id": 3,
        "itemsSold": [
          {
            "productId": 1,
            "quantity": 1
          },
          {
            "productId": 2,
            "quantity": 5
          }
          ]
      } 
  • Caso o campo productId não exista ou esteja vazio retorna com status 400:

      { "message": "\"productId\" is required" }
  • Caso o campo quantity não exista ou esteja vazio retorna com status 400:

      { "message": "\"quantity\" is required" }
  • Caso o valor no campo quantity seja menor ou igual a 0 retorna com status 422:

      { "message": "\"quantity\" must be greater than or equal to 1" }
  • Caso algum productId não exista no banco de dados retorna com status 404:

      { "message": "Product not found" }

/sales/:id

GET
  • Em caso de sucesso retorna com status 200:

      [
        {
          "date": "2021-09-09T04:54:29.000Z",
          "productId": 1,
          "quantity": 2
        },
        {
          "date": "2021-09-09T04:54:54.000Z",
          "productId": 2,
          "quantity": 2
        }
    
        /* ... */
      ]
  • Caso a venda não exista no banco de dados retorna com status 404:

      { "message": "Sale not found" }
PUT
  • Corpo da requisição

      [
        {
          "productId": 1,
          "quantity": 10
        },
        {
          "productId": 2,
          "quantity": 50
        }
      ]
  • Em caso de sucesso retorna com status 200:

      "saleId": 1,
        "itemsUpdated": [
          {
            "productId": 1,
            "quantity":10
          },
          {
            "productId": 2,
            "quantity":50
          }
        ]
  • Caso a venda não exista no banco de dados retorna com status 404:

      { "message": "Sale not found" }
DELETE
  • Em caso de sucesso retorna status 204.

  • Caso a venda não exista no banco de dados retorna com status 404:

      { "message": "Sale not found" }

About

A aplicação se trata de uma API para o gerenciamento de uma loja, onde é possível consultar e cadastrar produtos e vendas.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •