games-store-back/Functional-Requirements.md

5.3 KiB

Requisitos funcionais

Página inicial

Nesse readme é descrito cada requisito funcional do projeto.


Sumário


Requisitos funcionais

1 - Endpoint para o cadastro de produtos

Sumário

  • O endpoint deve ser acessível através do caminho (/products);

  • Os produtos enviados devem ser salvos em uma collection do MongoDB;

  • O endpoint deve receber a seguinte estrutura:

{
  "name": "product_name",
  "quantity": "product_quantity"
}

O retorno da API de um produto cadastrado com sucesso deverá ser:

{
  "_id": "5f43a7ca92d58904914656b6",
  "name": "Produto do Batista",
  "quantity": 100
}

Validações:

  • name deve ser uma string com mais de 5 caracteres e deve ser único;

  • quantity deve ser um número inteiro maior que 0;

  • Cada produto deve ter um id que seja único e gerado no momento em que o recurso for criado.

  • A resposta do endpoint em caso de sucesso deve ser o produto criado.

2 - Endpoint para listar os produtos

Sumário

  • O endpoint deve ser acessível através do caminho (/products) ou (/products/:id);

  • Através do caminho /products, todos os produtos devem ser retornados;

  • Através do caminho /products/:id, apenas o produto com o id presente na URL deve ser retornado;

3 - Endpoint para atualizar um produto

Sumário

  • O endpoint deve ser acessível através do caminho (/products/:id);

  • O corpo da requisição deve seguir a mesma estrutura do método responsável por adicionar um produto;

  • Apenas o produto com o id presente na URL deve ser atualizado;

4 - Endpoint para deletar um produto

Sumário

  • O endpoint deve ser acessível através do caminho (/products/:id);

  • Apenas o produto com o id presente na URL deve ser deletado;

5 - Endpoint para cadastrar vendas

Sumário

  • O endpoint deve ser acessível através do caminho (/sales);

  • As vendas enviadas devem ser salvas em uma collection do MongoDB;

  • Deve ser possível cadastrar a venda de vários produtos através da uma mesma requisição;

  • O endpoint deve receber a seguinte estrutura:

[
  {
  "productId": "product_id",
  "quantity": "product_quantity",
  },
  ...
]

O retorno de uma venda cadastrada com sucesso deverá ser:

{
  "_id": "5f43ba333200020b101fe4a0",
  "itensSold": [
    {
      "productId": "5f43ba273200020b101fe49f",
      "quantity": 2
    }
  ]
}

Validações:

  • O productId devem ser igual ao id de um produto anteriormente cadastrado;

  • quantity deve ser um número inteiro maior que 0;

  • Cada venda deve ter um id que seja único e gerado no momento em que o recurso for criado;

  • A resposta do endpoint em caso de sucesso deve ser a(s) venda(s) criada(s).

6 - Endpoint para listar as vendas

Sumário

  • O endpoint deve ser acessível através do caminho (/sales) ou (/sales/:id);

  • Através do caminho /sales, todas as vendas devem ser retornadas;

  • Através do caminho /sales/:id, apenas a venda com o id presente na URL deve ser retornada;

7 - Endpoint para atualizar uma venda

Sumário

  • O endpoint deve ser acessível através do caminho (/sales/:id);

  • O corpo da requisição deve receber a seguinte estrutura:

[
  {
    "productId": "5f3ff849d94d4a17da707008",
    "quantity": 3
  }
]
  • quantity deve ser um número inteiro maior que 0;

  • Apenas a venda com o id presente na URL deve ser atualizada;

8 - Endpoint para deletar uma venda

Sumário

  • O endpoint deve ser acessível através do caminho (/sales/:id);

  • Apenas a venda com o id presente na URL deve ser deletado;

9 - Atualização da quantidade de produtos

Sumário

  • Ao realizar uma venda, atualizá-la ou deletá-la, deve-se, também, atualizar a quantidade do produto em questão presente na collection responsável pelos produtos;

  • Por exemplo: suponha que haja um produto chamado Bola de Futebol e a sua propriedade quantity tenha o valor 10. Caso seja feita uma venda com 8 unidades desse produto, a quantidade do produto deve ser atualizada para 2 , pois 10 - 8 = 2;

10 - Validação da quantidade de produtos

Sumário

  • Um produto nunca deve ter a quantidade em estoque menor que 0;

  • Quando uma venda for realizada, precisa ser garantido que a quantidade sendo vendida está disponível no estoque.