Esse projeto contém uma série de informações sobre o que eu aprendi aqui na Trybe ao longo do curso de desenvolvimento web da Trybe.
Algumas habilidades desenvolvidas nesse projeto:
- Produzir código legível, conciso e expressivo utilizando as novas funcionalidades do ES6;
- Utilizar as Higher Order Functions para manipular e criar arrays;
- Escolher a Higher Order Function mais adequada para a obtenção de um resultado esperado;
- Aprender a usar de forma conjunta as Higher Order Functions;
- Interpretar testes unitários e produzir soluções que atendam a eles.
Esse projeto foi proposto pelo curso de desenvolvimento web da Trybe.
Essa página foi feita usando JavaScript.
Os commits foram feitos de acordo com os requisitos finalizados.
Todo o projeto foi feita na branch 'juliana-oliveira-zoo-function-project', isso por conta da exigência do curso.
Antes de realizar o projeto, precisei instalar as dependências usando npm install.
Os testes usando foram ESLint e Cypress, através dos comandos:
- npm test
- npm run lint:styles
Esse foi um projeto individual,que desenvolvido somente por Juliana Oliveira.
Foi usado Visual Studio Code, além do Trello que auxiliou na organização das tarefas.
Nenhum.
Antes de começar, analise o arquivo data/zoo_data.js, para ver os dados que serão usados.
No trabalho do desenvolvimento de software a gente sempre tem prazos, muitas vezes os prazos são apertados.
Por outro lado, eu não quero criar algo que não entendo perfeitamente, como também fazer códigos rápidos pode levar a erros que podem demorar muito pra corrigir.
Por isso, usei e sempre uso o método Baby Steps, que é uma estratégia de abordar o desafio passo à passo, defensivamente.
Baby steps é um termo em inglês que quer dizer passos de bebê. Refere-se a fazer as coisas, quaisquer que sejam, devagar, com calma, passo a passo.
Esta função é responsável pela busca das espécies de animais por id. Ela retorna um array contendo as espécies referentes aos ids passados como parâmetro, podendo receber um ou mais ids.
Observações técnicas
- O parâmetro desta função pode ser alterado para atender ao requisito proposto.
Esta função, a partir do nome de uma espécie e uma idade mínima, verifica se todos os animais daquela espécie possuem a idade mínima especificada.
Observações técnicas
- Deve retornar um valor booleano.
Esta função é responsável pela busca das pessoas colaboradoras através do primeiro ou do último nome delas
Considerando a boa prática de dividir o código em partes menores, apresentamos a função getRelatedEmployees
em que você deverá dividí-la em duas funções:
1 - isManager
- que será responsável por verificar se uma pessoa colaboradora é gerente ou não. O retorno dessa função deve ser um booleano: true
ou false
;
2 - getRelatedEmployees
- que utiliza a primeira função para apresentar as seguintes saídas:
- se for uma pessoa colaboradora gerente, deve retornar um array contendo os nomes das pessoas colaboradoras que ela é responsável;
- se não for uma pessoa colaboradora gerente, deverá ser lançado um erro gerado com a função construtora Error da biblioteca padrão do JavaScript com a mensagem "O id inserido não é de uma pessoa colaboradora gerente!".
Exemplo:
throw new Error('O id inserido não é de uma pessoa colaboradora gerente!');
Você pode ler mais sobre a função construtora Error, neste link.
Observações técnicas
- Retorna um array contendo nome e sobrenome das pessoas colaboradoras gerenciadas por determinada pessoa com cargo de gerência.
Exemplo de output:
[ 'Burl Bethea', 'Ola Orloff', 'Emery Elser' ];
- Dispara um erro com a mensagem: "O id inserido não é de uma pessoa colaboradora gerente!".
Esta função é responsável por contabilizar a quantidade de animais de cada espécie.
Observações técnicas
- Se nenhum argumento for passado, retorna um objeto cujo o nome de cada espécie é uma chave desse objeto, e o total de animais dessa espécie é o seu valor;
- Com o argumento
{ specie: 'penguins' }
, retorna um número, a quantidade de pinguins no zoológico; - Com o argumento
{ specie: 'giraffes', sex: 'female' }
, retorna um número, a quantidade de girafas do sexo feminino.
Esta função irá receber um array de visitantes no seguinte formato:
const entrants = [
{ name: 'Lara Carvalho', age: 5 },
{ name: 'Frederico Moreira', age: 5 },
{ name: 'Pedro Henrique Carvalho', age: 5 },
{ name: 'Maria Costa', age: 18 },
{ name: 'Núbia Souza', age: 18 },
{ name: 'Carlos Nogueira', age: 50 },
];
Você deve isolar a parte da lógica na função countEntrants
que se encontra no mesmo arquivo da função calculateEntry
. Ela deverá receber o array de visitantes e retornar um objeto com a contagem de acordo com os seguintes critérios de classificação:
- Pessoas com idade menor que 18 anos são classificadas como crianças (child);
- Pessoas com idade maior ou igual a 18 anos e menor que 50 são classicadas como adultas (adult);
- Pessoas com idade maior ou igual 50 anos são classificadas como pessoas com mais idade (senior).
O retorno da função deverá ser um objeto no seguinte formato: { child: 3, adult: 2, senior: 1 }
.
Exemplo de uso da função countEntrants
:
countEntrants(entrants);
Saída:
{ "child": 3, "adult": 2, "senior": 1 }
Após terminar a implementação da função countEntrants
você deverá utilizá-la para implementar a função calculateEntry
. Esta deverá receber um array de visitantes e a partir da quantidade de visitantes e faixa etária de cada um, deverá retornar o valor total a ser cobrado.
Exemplo de uso da função calculateEntry
:
calculateEntry(entrants);
Saída:
187.94
Observações técnicas
- Ambas funções recebem como parâmetro um array contendo objetos que representam pessoas.
A função é responsável pelo mapeamento geográfico das espécies e seus animais, podendo ainda filtrá-los por ordem alfabética e sexo.
Observações técnicas
- Analise o teste unitário para entender os retornos que são esperados para esta função.
A função é responsável por disponibilizar as informações de horário dos animais em uma consulta para o usuário, que pode querer ter acesso ao cronograma da semana, de um dia ou de um animal em específico.
Observações técnicas
- Analise os testes unitários para entender os retornos que são esperados para esta função;
- Quebre o problema em funções menores para que fique mais simples de administrar a responsabilidade de cada uma delas.
A função busca por informações do animal mais velho da primeira espécie gerenciada pela pessoa colaboradora do parâmetro.
Esta função será responsável por associar informações de cobertura das pessoas funcionárias.
A cobertura deverá ser representada por um objeto com as seguintes propriedades:
{
"id": "4b40a139-d4dc-4f09-822d-ec25e819a5ad", // id da pessoa
"fullName": "Sharonda Spry", // nome completo: firstName + lastName
"species": [ "otters", "frogs" ], // espécies as quais a pessoa é responsável
"locations": [ "SE", "SW" ], // Um array contendo todas as localizações das espécies
}
A função deve receber um objeto de opções que determinará seu comportamento, sendo:
- name: O nome ou sobrenome da pessoa a ser buscada
- id: O id da pessoa a ser buscada
Exemplos de uso da função getEmployeesCoverage
:
getEmployeesCoverage({ name: 'Sharonda' });
getEmployeesCoverage({ name: 'Spry' });
getEmployeesCoverage({ id: '4b40a139-d4dc-4f09-822d-ec25e819a5ad' });
Saída:
{
"id": "4b40a139-d4dc-4f09-822d-ec25e819a5ad",
"fullName": "Sharonda Spry",
"species": [ "otters", "frogs" ],
"locations": [ "SE", "SW" ]
}
Ao ser chamada sem argumentos, deverá retornar um array com a cobertura de todas as pessoas funcionárias:
Exemplo:
getEmployeesCoverage();
Saída:
[
{
"id": "c5b83cb3-a451-49e2-ac45-ff3f54fbe7e1",
"fullName": "Nigel Nelson",
"species": [ "lions", "tigers" ],
"locations": [ "NE", "NW" ],
},
{
"id": "0e7b460e-acf4-4e17-bcb3-ee472265db83",
"fullName": "Burl Bethea",
"species": [ "lions", "tigers", "bears", "penguins" ],
"locations": [ "NE", "NW", "NW", "SE" ],
},
{
"id": "fdb2543b-5662-46a7-badc-93d960fdc0a8",
"fullName": "Ola Orloff",
"species": [ "otters", "frogs", "snakes", "elephants" ],
"locations": [ "SE", "SW", "SW", "NW" ],
},
//[...]
];
Caso nenhuma pessoa seja encontrada com o nome, sobrenome ou id, deverá ser lançado um erro gerado com a função construtora Error da biblioteca padrão do JavaScript com a mensagem "Informações inválidas". Exemplo:
throw new Error('Informações inválidas');
Você pode ler mais sobre a função construtora Error, neste link.
Dica: Crie funções que dividam a tarefa em partes menores, por exemplo, você poderia criar uma função getSpecies
encarregada somente por buscar o nome das espécies que a pessoa é responsável.
Observações técnicas
- Ao receber o objeto de opções com a propriedade name, procura a pessoa funcionária correspondente;
- A opção name deverá aceitar nome e sobrenome para realizar a busca;
- Ao chamar a função sem argumentos ela deve retornar um array com a cobertura de todas as pessoas funcionárias.