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
skuna remessa devem ser ignorados. - Quando o segmento
zonenão for fornecido, deve ser atribuído o valor padrão"general". - O valor
qtydeve ser convertido para número.
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
qtyigual a0ou menor, o tipo da ação deve ser"discard", independentemente de o item existir na despensa. - Caso contrário, se o
skudo item da remessa já existir na despensa, o tipo da ação deve ser"restock". - Caso contrário (o
skudo item da remessa não existir na despensa), o tipo da ação deve ser"donate".
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