Para criar descontos, produtos e reservas de produtos, usar os padrões de payload de exemplo contidos no arquivo payloads.md, na raiz do projeto.
É gerado um SKU para os produtos cadastrados. Ao incluir um produto já existente, com os mesmos atributos como categoria, marca, nome, modelo, cor e tamanho, será gerado o SKU e vereificado se o mesmo já está cadastrado. Caso positivo, não será criado um novo produto, mas o existente será atualizado com as demais informações, como descrição, quantidade disponível, disponibilidade, preço e desconto.
Para criar um produto com desconto, ou atualizar o desconto em um produto existente, precisa criar o desconto primeiro.
O serviço só permite criar um desconto por categoria de produto.
Para desconto específico para um produto, não informar a categoria e atualizar o produto com o id do desconto criado especificamente para ele.
Para cupom de desconto é verificado se já foi criado um cupom com o mesmo nome, não permitindo duplicidade.
Pode-se criar desconto de valor ou de porcentagem. Eles são verificados ao realizar a reserva de um produto, de acordo com a categoria e se é por valor ou porcentagem, retornando o valor calculado em cima do valor do produto e da quantidade solicitada.
Para produtos que não possuem desconto específico, a aplicação verificará se existe um desconto para a categoria do produto.
Toda verificação de desconto também valida se o desconto está ativo e dentro do período de vigência cadastrado.
Ao buscar por produtos, a aplicação verifica se há desconto ativo e dentro do período de vigência cadastrado para retornar informações de desconto para todos os produtos elegíveis.
Ao criar uma reserva, a quantidade solicitada já é removida do estoque do produto.
Ao atualizar uma reserva, se a quantidade for maior, é verificada a disponibilidade do produto em estoque, retornando UNAVAILABLE caso a quantidade solicitada seja maior que a disponível, e a diferença não é removida do estoque.
Se aquantidade alterada for para menor, a diferença é devolvida para o estoque.
Ao cancelar uma reserva, ela não poderá mais ser confirmada, sendo necessário criar uma nova reserva.
Uma reserva confirmada poderá ser cancelada, devolvendo a quantidade reservada ao estoque.
As reservas no status CREATED expiram após 30 minutos da sua última atualização caso não sejam confirmadas, e a quantidade reservada será devolvida ao estoque.
Reservas expiradas não podem ser confirmadas, alteradas ou canceladas.
Para carga de produtos, pode-se utilizar o arquivo products.csv na raiz do projeto, e enviar o arquivo pelo endpoint /productBatch/importProducts
É possível listar todos os produtos, com ou sem filtro. O filtro permite retornar produtos por nome, categoria ou fornecedor.
É possível listar reservas, com ou sem filtro. O filtro permite retornar reservas por status CREATED, CONFIRMED, CANCELLED, EXPIRED ou UNAVAILABLE.