Skip to content

Projeto Zoo Functions - Projeto avaliativo da Trybe do Bloco 08: Higher Order Functions do JavaScript ES6

Notifications You must be signed in to change notification settings

lmuffato/Project-zoo-functions-Trybe

Repository files navigation

Ao iniciar este projeto, você concorda com as diretrizes do Código de Ética e Conduta e do Manual da Pessoa Estudante da Trybe.

Boas vindas ao repositório do projeto de ES6 e Higher Order Functions!

Você já usa o GitHub diariamente para desenvolver os exercícios, certo? Agora, para desenvolver os projetos, você deverá seguir as instruções a seguir. Fique atento a cada passo, e se tiver qualquer dúvida, nos envie por Slack! #vqv 🚀

Aqui você vai encontrar os detalhes de como estruturar o desenvolvimento do seu projeto a partir desse repositório, utilizando uma branch específica e um Pull Request para colocar seus códigos.


Habilidades

Neste projeto, verificamos se você é capaz de:

  • 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

Sumário


Entregáveis

O QUE DEVERÁ SER DESENVOLVIDO

Você implementará várias funções para atender aos requisitos propostos e garantir que todas as funções passem nos testes unitários.

DESENVOLVIMENTO

Este repositório contém um template de uma aplicação NodeJS (observe a existência do arquivo package.json). Após clonar o projeto e instalar as dependências, você não precisará realizar nenhuma configuração adicional. Todos os arquivos estritamente necessários para finalizar o projeto já estão criados, não sendo necessária a criação de outros arquivos. Você deverá completar as funções e testes unitários de forma a satisfazer os requisitos listados na próxima seção.

Na pasta raíz do projeto, temos a pasta src e a pasta tests. A pasta src é composta pelo arquivo zoo.js, que contém as funções a serem implementadas, e o arquivo data.js, que armazena os dados que serão utilizados. Já a pasta tests, contém os testes unitários correspondentes a cada função do arquivo zoo.js.

O nome dos arquivos também segue uma ordem definida. Basicamente, os arquivos de teste possuem o nome da função alvo acrescido do nome .spec.js. O arquivo src/zoo.js conterá a implementação de uma função, animalsByIds, por exemplo, e o arquivo tests/animalsByIds.spec.js conterá os testes unitários referentes à função.

Você só deve alterar os arquivos indicados nos requisitos. Os arquivos que não estão indicados nos requisitos não devem ser alterados, ou sua avaliação poderá ser comprometida.

DATA DE ENTREGA

  • O projeto tem até a seguinte data: 16/04/2021 - 14:00h para ter entregue a avaliação final.

Instruções para entregar seu projeto

ANTES DE COMEÇAR A DESENVOLVER

  1. Clone o repositório
  • git clone https://github.com/tryber/sd-010-a-project-zoo-functions.git.
  • Entre na pasta do repositório que você acabou de clonar:
    • cd sd-010-a-project-zoo-functions
  1. Instale as dependências
  • npm install
  1. Crie uma branch a partir da branch master
  • Verifique que você está na branch master
    • Exemplo: git branch
  • Se não estiver, mude para a branch master
    • Exemplo: git checkout master
  • Agora crie uma branch para qual você vai submeter os commits do seu projeto
    • Você deve criar uma branch no seguinte formato: nome-de-usuario-nome-do-projeto
    • Exemplo: git checkout -b luiza-zoo-functions-project
  1. Desenvolva a solução para os problemas no arquivo src/zoo.js. Você pode usar os arquivos do diretório test para verificar se a sua implementação está de acordo com o esperado;

  2. Adicione as mudanças ao stage do Git e faça um commit

  • Verifique que as mudanças ainda não estão no stage
    • Exemplo: git status (o arquivo src/zoo.js deve aparecer em vermelho)
  • Adicione o novo arquivo ao stage do Git
    • Exemplo:
      • git add . (adicionando todas as mudanças - que estavam em vermelho - ao stage do Git)
      • git status (deve aparecer listado o arquivo src/zoo.js em verde)
  • Faça o commit inicial
    • Exemplo:
      • git commit -m 'iniciando o projeto. VAMOS COM TUDO :rocket:' (fazendo o primeiro commit)
      • git status (deve aparecer uma mensagem tipo nothing to commit )
  1. Adicione a sua branch com o novo commit ao repositório remoto
  • Usando o exemplo anterior: git push -u origin luiza-zoo-functions-project
  1. Crie um novo Pull Request (PR)
  • Vá até a página de Pull Requests do repositório no GitHub
  • Clique no botão verde "New pull request"
  • Clique na caixa de seleção "Compare" e escolha a sua branch com atenção
  • Clique no botão verde "Create pull request"
  • Adicione uma descrição para o Pull Request e clique no botão verde "Create pull request"
  • Não se preocupe em preencher mais nada por enquanto!
  • Volte até a página de Pull Requests do repositório e confira que o seu Pull Request está criado.

DURANTE O DESENVOLVIMENTO

📌 PULL REQUESTS COM ISSUES NO ESLINT NÃO SERÃO AVALIADAS, ATENTE-SE PARA RESOLVÊ-LAS ANTES DE FINALIZAR O DESENVOLVIMENTO!

📌 OS NOMES DOS ARQUIVOS NÃO DEVEM SER ALTERADOS! Você pode adicionar outros arquivos, se julgar necessário. Qualquer dúvida, procure a Pessoa Instrutora que te acompanha.

  • Faça commits das alterações que você fizer no código regularmente

  • Lembre-se de sempre, após um (ou alguns) commits, atualizar o repositório remoto

  • Os comandos que você utilizará com mais frequência são:

    1. git status (para verificar o que está em vermelho - fora do stage - e o que está em verde - no stage)
    2. git add (para adicionar arquivos ao stage do Git)
    3. git commit (para criar um commit com os arquivos que estão no stage do Git)
    4. git push (para enviar o commit para o repositório remoto após o passo anterior)
    5. git push -u nome-da-branch (para enviar o commit para o repositório remoto na primeira vez que fizer o push de uma nova branch)
    6. npm test (executa todos os testes presentes na aplicação)
    7. npm test path/to/file (executa apenas os testes presentes no arquivo path/to/file)

DEPOIS DE TERMINAR O DESENVOLVIMENTO (OPCIONAL)

Para "entregar" seu projeto, siga os passos a seguir:

  • Vá até a página DO SEU Pull Request, adicione a label de "code-review" e marque seus colegas
    • No menu à direita, clique no link "Labels" e escolha a label code-review
    • No menu à direita, clique no link "Assignees" e escolha o seu usuário
    • No menu à direita, clique no link "Reviewers" e digite students, selecione o time tryber/students-sd-00

Se ainda houver alguma dúvida sobre como entregar seu projeto, aqui tem um video explicativo.

📌 LEMBRE-SE DE GARANTIR QUE TODAS AS ISSUES COMENTADAS PELO ESLINT ESTÃO RESOLVIDAS


Requisitos do projeto

Vocẽ deverá implementar as funções que estão no src/zoo.js para passarem em cada um dos testes. O teste test/animalsByIds.test.js, por exemplo, testa a função animalsByIds, que já está criada dentro do src/zoo.js, embora ainda não contenha lógica alguma. Para ver o que cada função precisa retornar, basta ver o assert de cada um dos testes.

Utilize as novas funcionalidades do ES6 como arrow functions, template literals, spread operator, parâmetro rest, object destructuring, entre outras. Utilize também as Higher Order Functions.

Dica: uma importante soft-skill é saber como gerenciar seu tempo. Alguns exercícios são mais difíceis que outros, e não estão em ordem de complexidade. Caso tenha dificuldade para realizar algum exercício, pule-o, resolva outro, e, quando se sentir confortável, volte ao exercício em questão. A ideia é não ficar preso a um problema por um longo período. Realizar outros exercícios pode te ajudar a enxergar e/ou aprender novas maneiras de se chegar ao resultado esperado.

Antes de começar, analise o arquivo src/data.js, para ver os dados que serão usados.

1. IMPLEMENTE A FUNÇÃO animalsByIds

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

O que será avaliado

  • Caso receba nenhum parâmetro, necessário retornar um array vazio
  • Ao receber como parâmetro um único id, retorna um array com a espécie referente à esse id
  • Ao receber mais de um id, retorna um array com as espécies referentes aos ids

2. IMPLEMENTE A FUNÇÃO animalsOlderThan

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

O que será avaliado

  • Ao passar o nome de uma espécie e uma idade, testa se todos os animais desta espécie possuem a idade mínima especificada

3. IMPLEMENTE A FUNÇÃO employeeByName

Esta função é responsável pela busca das pessoas colaboradoras através do primeiro ou do último nome delas

O que será avaliado

  • Sem parâmetros, retorna um objeto vazio
  • Quando provido o primeiro nome do funcionário, retorna o objeto do funcionário
  • Quando provido o último nome do funcionário, retorna o objeto do funcionário

4. IMPLEMENTE A FUNÇÃO createEmployee

A função, a partir de informações recebidas nos parâmetros, é capaz de criar um objeto equivalente ao de uma pessoa colaboradora, retornando-o

Observações técnicas

  • O parâmetro personalInfo recebe um objeto que contém o id, o firstName e o lastName
  • O parâmetro associatedWith recebe um objeto que contém dois array: managers e responsibleFor

O que será avaliado

  • Cria um novo colaborador a partir de objetos contendo informações pessoais e gerentes e animais gerenciados.

5. IMPLEMENTE A FUNÇÃO isManager

Verifica se uma pessoa colaboradora, a partir de seu id, ocupa cargo de gerência.

Observações técnicas

  • Deve retornar um valor booleano

O que será avaliado

  • Testa se o id passado é de um gerente

6. IMPLEMENTE A FUNÇÃO addEmployee

A função irá adicionar uma nova pessoa colaboradora ao array employees, presente no arquivo data.js.

O que será avaliado

  • Adiciona um funcionário no fim da lista

7. IMPLEMENTE A FUNÇÃO animalCount

Esta função é responsável por contabilizar a quantidade de animais.

Observações técnicas

  • Sem parâmetros, retorna um objeto
  • Com o nome de uma espécie de animal, retorna um número

O que será avaliado

  • Sem parâmetros, retorna animais e suas quantidades
  • Com o nome de uma espécie de animal, retorna somente a quantidade

8. IMPLEMENTE A FUNÇÃO entryCalculator

A partir da quantidade de visitantes e a faixa etária de cada um, esta função é responsável por retornar o preço total a ser cobrado

Observações técnicas

  • O parâmetro entrants recebe um objeto que contém as chaves Adult, Child e Senior, com suas respectivas quantidades de pessoas

O que será avaliado

  • Retorna 0 se nenhum argumento for passado
  • Retorna 0 se um objeto vazio for passado
  • Retorna o preço total a ser cobrado dado o número de adultos, crianças e idosos

9. IMPLEMENTE A FUNÇÃO animalMap

A função é responsável pelo mapeamento geográfico das espécies e seus animais, podendo ainda filtrá-los por ordem alfabética e gênero, por exemplo

Observações técnicas

  • Analise o teste unitário para entender os retornos que são esperados para esta função

O que será avaliado

  • Sem parâmetros, retorna animais categorizados por localização
  • Com a opção includeNames: true especificada, retorna nomes de animais
  • Com a opção sorted: true especificada, retorna nomes de animais ordenados
  • Com a opção sex: 'female' ou sex: 'male' especificada, retorna somente nomes de animais macho/fêmea
  • Com a opção sex: 'female' ou sex: 'male' especificada e a opção sort: true especificada, retorna somente nomes de animais macho/fêmea com os nomes dos animais ordenados
  • Só retorna informações ordenadas e com sexo se a opção includeNames: true for especificada

10. IMPLEMENTE A FUNÇÃO schedule

A função é responsável por disponibilizar as informações de horário para uma consulta, que pode querer ter acesso a todo o cronograma da semana ou apenas o cronograma de um dia específico

Observações técnicas

  • Analise o teste unitário para entender os retornos que são esperados para esta função

O que será avaliado

  • Sem parâmetros, retorna um cronograma legível para humanos
  • Se um único dia for passado, retorna somente este dia em um formato legível para humanos

11. IMPLEMENTE A FUNÇÃO oldestFromFirstSpecies

A função busca por informações do animal mais velho da primeira espécie gerenciada pela pessoa colaboradora do parâmetro

O que será avaliado

  • Passado o id de um funcionário, encontra a primeira espécie de animal gerenciado pelo funcionário, e retorna um array com nome, sexo e idade do animal mais velho dessa espécie

12. IMPLEMENTE A FUNÇÃO increasePrices

A função é responsável por aumentar o preço das visitas, com base no valor de aumento recebido no parâmetro, em porcentagem

Observações técnicas

  • Se o parâmetro da função recebe o valor 20, o aumento é de 20%
  • Altera o objeto prices do arquivo data.js

O que será avaliado

  • Ao passar uma porcentagem, incrementa todos os preços, arrendondados em duas casas decimais

13. IMPLEMENTE A FUNÇÃO employeeCoverage

A função é responsável por consultar as espécies pela qual a pessoa colaborada, recebida no parâmetro através de seu id, firstName ou lastName, é responsável

Observações técnicas

  • Analise o teste unitário para entender os retornos que são esperados para esta função

O que será avaliado

  • Sem parâmetros, retorna uma lista de funcionários e os animais pelos quais eles são responsáveis
  • Com o id de um funcionário, retorna os animais pelos quais o funcionário é responsável
  • Com o primeiro nome de um funcionário, retorna os animais pelos quais o funcionário é responsável
  • Com o último nome de um funcionário, retorna os animais pelos quais o funcionário é responsável

Avisos Finais

REVISANDO UM PULL REQUEST

À medida que você e as outras pessoas que estudam na Trybe forem entregando os projetos, vocês receberão um alerta via Slack para também fazer a revisão dos Pull Requests dos seus colegas. Fiquem atentos às mensagens do "Pull Reminders" no Slack!

Use o material que você já viu sobre Code Review para te ajudar a revisar os projetos que chegaram para você.

AVALIAÇÃO DO PROJETO

Ao finalizar e submeter o projeto, não se esqueça de avaliar sua experiência preenchendo o formulário. Leva menos de 3 minutos!

Link: FORMULÁRIO DE AVALIAÇÃO DE PROJETO

ORDEM DOS REQUISITOS NO AVALIADOR AUTOMÁTICO

O avaliador automático não necessariamente avalia seu projeto na ordem em que os requisitos aparecem no readme. Isso acontece para deixar o processo de avaliação mais rápido. Então, não se assuste se isso acontecer, ok?


About

Projeto Zoo Functions - Projeto avaliativo da Trybe do Bloco 08: Higher Order Functions do JavaScript ES6

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published