Instruções

construir um repositor inteligente de despensa

Neste laboratório, você vai construir um pequeno programa de gerenciamento de despensa usando conceitos básicos de Javascript como arrays, objetos, loops e condicionais. Você vai simular o recebimento de uma remessa de itens para a despensa, decidir o que fazer com cada item e organizar os resultados para armazenamento. Objetivo: Atender às user stories abaixo e fazer todos os testes passarem para completar o laboratório. O array rawData contém strings separadas por pipe no formato sku|name|qty|expires|zone, onde zone é opcional. User stories: 1. Você deve implementar uma função parseShipment(rawData) que recebe um array de strings e retorna um array de objetos com propriedades { sku, name, qty, expires, zone }.
  • Valores duplicados de sku na remessa devem ser ignorados.
  • Quando o segmento zone não for fornecido, deve ser atribuído o valor padrão "general".
  • O valor qty deve ser convertido para número.
2. Você deve implementar uma função planRestock(pantry, shipment) que compara a despensa atual com a remessa recebida e retorna um array de ações na forma { type, item }, onde type é um dos valores "restock", "discard" ou "donate", e item é o objeto da remessa analisado. O parâmetro pantry é um array de objetos com a mesma forma de um item da remessa analisada ({ sku, name, qty, expires, zone }).
  • Se um item da remessa tiver qty igual a 0 ou menor, o tipo da ação deve ser "discard", independentemente de o item existir na despensa.
  • Caso contrário, se o sku do item da remessa já existir na despensa, o tipo da ação deve ser "restock".
  • Caso contrário (o sku do item da remessa não existir na despensa), o tipo da ação deve ser "donate".
3. Você deve implementar uma função groupByZone(actions) que agrupa as ações em zonas de armazenamento com base na propriedade zone de cada item. A função deve retornar um objeto onde cada chave é o nome da zona e o valor é um array de ações pertencentes a essa zona. Por exemplo, se as ações contiverem itens com zonas "fridge" e "pantry", o resultado deve ser { fridge: [...], pantry: [...] }. 4. Você deve implementar uma função clonePantry(pantry) que retorna uma cópia profunda da despensa para que as alterações planejadas não afetem a lista original. Uma cópia profunda significa criar um novo array com novos objetos, assim modificar a cópia não altera a despensa original. 5. Você deve usar todas as funções juntas para processar uma remessa e registrar o objeto final agrupado no console.

O que fazer:

Testes:

  • Você deve definir uma função chamada `parseShipment` que aceita um array de strings chamado `rawData` como parâmetro.
  • Sua função `parseShipment` deve converter as strings da remessa no array em objetos com as propriedades: `sku`, `name`, `qty`, `expires` e `zone`.
  • SKUs duplicados na remessa devem ser ignorados.
  • Quando `zone` não estiver presente em uma string da remessa, você deve atribuí-la a `general`.
  • O valor `qty` deve ser convertido em número.
  • Você deve definir uma função chamada `planRestock` que aceita dois parâmetros: `pantry` e `shipment`.
  • Sua função `planRestock` deve retornar um array de ações com as propriedades `type` e `item`.
  • Itens com quantidade `0` ou menor na remessa devem criar uma ação do tipo `discard`, independentemente de o item estar na despensa.
  • Quando um item da remessa já existe na despensa (mesmo `sku`), a ação deve ser `restock`.
  • Se um item da remessa não existe na despensa, a ação deve ser `"donate"`.
  • Você deve definir uma função chamada `groupByZone` que aceita um parâmetro chamado `actions`.
  • Sua função `groupByZone` deve retornar as ações agrupadas pela propriedade `zone` de cada objeto.
  • Sua função `groupByZone` deve agrupar corretamente as ações com o conteúdo e quantidade certos.
  • Você deve definir uma função chamada `clonePantry` que aceita um parâmetro chamado `pantry`.
  • `clonePantry` deve retornar um novo array em vez do array original da despensa.
  • Os objetos dentro da despensa clonada também devem ser novos objetos (cópia profunda).
  • As funções devem funcionar juntas para processar uma remessa e agrupar as ações resultantes.
  • Você deve registrar as ações resultantes agrupadas por zonas.

Console