{"id":22226365,"url":"https://github.com/trkotovicz/zoo-functions","last_synced_at":"2025-03-25T08:29:59.608Z","repository":{"id":155118860,"uuid":"496825602","full_name":"trkotovicz/zoo-functions","owner":"trkotovicz","description":"Projeto Javascript (ES6), Higher Order Functions e lógica de programação.","archived":false,"fork":false,"pushed_at":"2022-11-01T22:42:44.000Z","size":186,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-30T07:44:06.098Z","etag":null,"topics":["es6","hofs","javascript","javascript-es6","logica-de-programacao","logical-programming"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trkotovicz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-27T01:35:57.000Z","updated_at":"2022-11-01T22:40:52.000Z","dependencies_parsed_at":"2024-12-03T00:28:33.424Z","dependency_job_id":null,"html_url":"https://github.com/trkotovicz/zoo-functions","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fzoo-functions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fzoo-functions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fzoo-functions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trkotovicz%2Fzoo-functions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trkotovicz","download_url":"https://codeload.github.com/trkotovicz/zoo-functions/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245425846,"owners_count":20613249,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["es6","hofs","javascript","javascript-es6","logica-de-programacao","logical-programming"],"created_at":"2024-12-03T00:28:20.863Z","updated_at":"2025-03-25T08:29:59.588Z","avatar_url":"https://github.com/trkotovicz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Boas vindas ao repositório do projeto Zoo Functions!\n\nEsse é um projeto de ES6, Higher Order Functions e lógica de programação.\n\n### Habilidades\n\nNeste projeto, fui capaz de:\n- Produzir código legível, conciso e expressivo utilizando as novas funcionalidades do ES6;\n- Utilizar as _Higher Order Functions_ para manipular e criar arrays;\n- Escolher a _Higher Order Function_ mais adequada para a obtenção de um resultado esperado;\n- Aprender a usar de forma conjunta as _Higher Order Functions_;\n- Interpretar testes unitários e produzir soluções que atendam a eles.\n\n---\n\n### O que foi desenvolvido\n\nFoi implementado várias funções para atender aos requisitos propostos e garantir que todas as funções passassem nos testes unitários.\n\n---\n\n### `getSpeciesByIds`\n\nEsta 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.\n\n**O que foi avaliado**\n- Caso receba nenhum parâmetro, necessário retornar um array vazio;\n- Ao receber como parâmetro um único id, retorna um array com a espécie referente à esse id;\n- Ao receber mais de um id, retorna um array com as espécies referentes aos ids.\n\n---\n\n### `getAnimalsOlderThan`\n\nEsta 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.\n- A função retorna um valor booleano.\n\n**O que foi avaliado**\n- 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.\n\n---\n\n### `getEmployeeByName`\n\nEsta função é responsável pela busca das pessoas colaboradoras através do primeiro ou do último nome delas\n\n**O que foi avaliado**\n- Sem parâmetros, retorna um objeto vazio\n- Quando provido o primeiro nome do funcionário, retorna o objeto do funcionário\n- Quando provido o último nome do funcionário, retorna o objeto do funcionário\n\n---\n\n### `getRelatedEmployees`\n\nConsiderando a boa prática de dividir o código em partes menores, a função `getRelatedEmployees` é dividida em duas funções: \n`isManager` - responsável por verificar se uma pessoa colaboradora é gerente ou não. O retorno dessa função deve ser um booleano: `true` ou `false`;\n`getRelatedEmployees` - que utiliza a primeira função para apresentar as seguintes saídas: \n  * se for uma pessoa colaboradora gerente, deve retornar um array contendo os nomes das pessoas colaboradoras que ela é responsável;\n  * 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!\"**.\n\n**O que foi avaliado**\n- Retorna `true` se o id passado for de um gerente;\n- Retorna `false` se o id passado não for de um gerente;\n- Se o id passado for de um gerente, retorna um array contendo nome e sobrenome das pessoas colaboradoras que ela é responsável;\n- Se o id passado **não** for de um gerente, dispara um erro com a mensagem: \"O id inserido não é de uma pessoa colaboradora gerente!\".\n\n---\n\n### `countAnimals`\n\n  Esta função é responsável por contabilizar a quantidade de animais de cada espécie.\n  - 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;\n  - Com o argumento `{ specie: 'penguins' }`, retorna um número, a quantidade de pinguins no zoológico;\n  - Com o argumento `{ specie: 'giraffes', sex: 'female' }`, retorna um número, a quantidade de girafas do sexo feminino.\n\n**O que foi avaliado**\n- Sem parâmetros, retorna as espécies e sua quantidade;\n- Recebendo como parâmetro um objeto com a chave `specie`, retorna um número, a quantidade de animais daquela espécie;\n- Recebendo como parâmetro um objeto com a chave `specie` e `sex`, retorna um número, a quantidade de animais daquela espécie, no sexo selecionado.\n\n---\n\n### `calculateEntry`\n\nEsta função irá receber um array de visitantes no seguinte formato:\n```javascript\nconst entrants = [\n  { name: 'Lara Carvalho', age: 5 },\n  { name: 'Frederico Moreira', age: 5 },\n  { name: 'Pedro Henrique Carvalho', age: 5 },\n  { name: 'Maria Costa', age: 18 },\n  { name: 'Núbia Souza', age: 18 },\n  { name: 'Carlos Nogueira', age: 50 },\n];\n```\nVocê 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:\n* Pessoas com idade menor que 18 anos são classificadas como crianças (child);\n* Pessoas com idade maior ou igual a 18 anos e menor que 50 são classicadas como adultas (adult);\n* Pessoas com idade maior ou igual 50 anos são classificadas como pessoas com mais idade (senior).\nO retorno da função deverá ser um objeto no seguinte formato: `{ child: 3, adult: 2, senior: 1 }`.\n\nApó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.\n- Ambas funções recebem como parâmetro um array contendo objetos que representam pessoas.\n\n**O que foi avaliado**\n- Ao receber um array de visitantes, retorna um objeto com a contagem;\n- Retorna 0 se nenhum argumento for passado;\n- Retorna 0 se um objeto vazio for passado;\n- Retorna o preço total a ser cobrado dado o array de pessoas.\n\n---\n\n### `getAnimalMap`\n\nA função é responsável pelo mapeamento geográfico das espécies e seus animais, podendo ainda filtrá-los por ordem alfabética e sexo.\n\n**O que foi avaliado**\n- Sem parâmetros, retorna animais categorizados por localização;\n- Sem a opção `includeNames` especificada, retorna animais categorizados por localização;\n- Com a opção `includeNames: true` especificada, retorna nomes de animais;\n- Com a opção `sorted: true` especificada, retorna nomes de animais ordenados;\n- Com a opção `sex: 'female'` ou `sex: 'male'` especificada, retorna somente nomes de animais macho/fêmea;\n- Com a opção `sex: 'female'` ou `sex: 'male'` especificada e a opção `sorted: true` especificada, retorna somente nomes de animais macho/fêmea com os nomes dos animais ordenados;\n\n---\n\n### `getSchedule`\n\nA 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.\n- Quebre o problema em funções menores para que fique mais simples de administrar a responsabilidade de cada uma delas.\n\n**O que foi avaliado**\n- Sem parâmetros, retorna os horários para cada dia e quais animais estarão disponíveis;\n- Com parâmetros que não sejam nem um animal e nem um dia, retorna os horários para cada dia e quais animais estarão disponíveis;\n- Se um único dia for passado, retorna os horários para aquele dia e quais animais estarão disponíveis;\n- Se o nome de um animal for passado, deverá retornar um array com os dias em que ele estará em exibição.\n \n---\n\n### `getOldestFromFirstSpecies`\n\nA função busca por informações do animal mais velho da primeira espécie gerenciada pela pessoa colaboradora do parâmetro.\n\n**O que foi avaliado**\n- 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.\n\n---\n\n### `getEmployeesCoverage`\n\nEsta função será responsável por associar informações de cobertura das pessoas funcionárias.\nA cobertura deverá ser representada por um objeto com as seguintes propriedades:\n```javascript\n{\n  \"id\": \"4b40a139-d4dc-4f09-822d-ec25e819a5ad\", // id da pessoa\n  \"fullName\": \"Sharonda Spry\", // nome completo: firstName + lastName\n  \"species\": [ \"otters\", \"frogs\" ], // espécies as quais a pessoa é responsável\n  \"locations\": [ \"SE\", \"SW\" ], // Um array contendo todas as localizações das espécies\n}\n```\nA função deve receber um objeto de opções que determinará seu comportamento, sendo:\n* **name**: O nome ou sobrenome da pessoa a ser buscada\n* **id**: O id da pessoa a ser buscada\nAo ser chamada sem argumentos, deverá retornar um array com a cobertura de todas as pessoas funcionárias.\nCaso 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\"**.\n- Ao receber o objeto de opções com a propriedade name, procura a pessoa funcionária correspondente;\n- A opção name deverá aceitar nome e sobrenome para realizar a busca;\n- Ao chamar a função sem argumentos ela deve retornar um array com a cobertura de todas as pessoas funcionárias.\n\n**O que foi avaliado**\n- Se o objeto de opções tiver a propriedade name, retorna somente a pessoa correspondente;\n- A propriedade name do objeto de opções também funciona usando o segundo nome;\n- Se o objeto de opções tiver a propriedade id, retorna somente a pessoa correspondente;\n- Sem parâmetros, retorna uma lista com a cobertura de todas as pessoas funcionárias;\n- Caso não haja nenhuma pessoa com o nome ou id especificados deverá ser lançado um error.\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Fzoo-functions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrkotovicz%2Fzoo-functions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrkotovicz%2Fzoo-functions/lists"}