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.


Instruções para entregar seu projeto:

ANTES DE COMEÇAR A DESENVOLVER:

  1. Clone o repositório
  • git clone https://github.com/tryber/sd-07-project-zoo-functions.git.
  • Entre na pasta do repositório que você acabou de clonar:
    • cd sd-07-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 exemplo-zoo-functions
  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 (deve aparecer listada a pasta joaozinho 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 joaozinho/README.md 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 exemplo-zoo-functions
  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.

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.


Prazo para entrega

O Prazo para entrega é de 7 dias corridos após o último dia de projeto.

Exemplo: Se o último dia de projeto aconteceu na quarta-feira, dia 17 de junho, seu prazo final de entrega será na quarta-feira 24 de junho às 14 horas.

Vale ressaltar que os projetos podem ter mais de um dia de duração, por isso o prazo de 7 dias é contado à partir do último dia de projeto.

⚠️ É importante que seus arquivos tenham exatamente estes nomes! ⚠️

Você pode adicionar outros arquivos se julgar necessário. Qualquer dúvida, procure a Pessoa Instrutora que te acompanha.

Lembre-se que você pode consultar nosso conteúdo sobre Git & GitHub sempre que precisar!


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.

As funções a serem implementadas estão dentro da pasta src e seus respectivos testes estão na pasta tests. O nome dos arquivos também seguem uma ordem definida. Basicamente, os arquivos de teste possuem o nome do arquivo alvo (arquivo da funcionalidade) acrescido do nome .spec.js. Existirá um arquivo src/exemplo.js que conterá a implementação de uma função e um arquivo tests/exemplo.spec.js com os testes unitários referentes à função presente no arquivo src/exemplo.js.

Cada função possui um bloco de comentários em suas primeiras linhas explicando qual é o trabalho que a função deve realizar.

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.


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 addEmployee, 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 as outras. Utilize também as High 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:

  • 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:

  • 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:

  • 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:

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

5- Implemente a função isManager:

  • Testa se o id passado é de um gerente

6- Implemente a função addEmployee:

  • Adiciona um funcionário no fim da lista

7- Implemente a função animalCount:

  • 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:

  • 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:

  • 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:

  • 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:

  • 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:

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

13- Implemente a função employeeCoverage:

  • 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

DURANTE O DESENVOLVIMENTO

  • LEMBRE-SE DE CRIAR TODOS OS ARQUIVOS DENTRO DA PASTA COM O SEU NOME

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

  • 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

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-07

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

⚠ Lembre-se que garantir que todas as issues comentadas pelo CodeClimate estão resolvidas! ⚠


REVISANDO UM PULL REQUEST

Use o conteúdo sobre Code Review para te ajudar a revisar os Pull Requests.

#VQV 🚀