Skip to content

naveteam/teste-estagio-2020

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 

Repository files navigation

Teste para vaga de estagiário

Os exercícios de lógica são obrigatórios para todas as vagas de estágio (tanto backend quanto frontend). Após realizados os exercícios de lógica, a pessoa candidata deve resolver os exercícios pertinentes a sua vaga. O exercício bônus é apenas para a vaga de backend e não é obrigatório, ficando a critério da pessoa candidata a entrega do mesmo.

Instruções

  • Utilizar apenas JavaScript puro para resolver o problema (não é permitido o uso de jquery);
  • Tente sempre utilizar a abordagem ES6+ para resolver os exercícios;
  • Os exercícios de lógica (E.1 à E.10) devem ser realizados no codesandbox, utilizando o template que pode ser encontrado aqui. Você deve adicionar o link do seu codesandbox no readme do repositório que vai ser entregue;
  • Entrega: todas as soluções devem estar em um único repositório (github, gitlab, bitbucket, etc…) de forma pública;
  • Neste repositório deve haver, na raiz, um README.md, com as instruções de execução do código desenvolvido;
  • Estilo fica ao critério do candidato, e não é o foco principal do teste;
  • Só será aceito o uso de bibliotecas de estilo e clientes HTTP (axios, fetch, etc);
  • Caso não consiga resolver todos os exercícios, não tem problema, envie mesmo assim;
  • Ao finalizar o teste, envie o link do seu repositório por mensagem lá na gupy.

Desafio

Resolver os seguintes exercícios

  • E.1 Crie uma função que recebe duas strings e retorna a de maior comprimento.
  • E.2 Dado a seguinte string ‘teste 1 de 2 string 3’, substitua todas as ocorrências de números por $.
  • E.3 Dado o objeto {4: ‘a’, 3: ‘e’, 1: ‘i’, 5: ‘s’} substitua os números na frase ‘T35t3 d3 35t4g1o’ conforme a sua respectiva letra.
  • E.4 Utilizando a api da viacep (https://viacep.com.br/) e o seu cep como entrada imprima o seu endereço no formato ‘ENDERECO, NUMERO, CIDADE/ESTADO’. Utilize a fetch API para realizar a requisição.

Para os exercícios seguintes considere o array de objetos:

[
    {id: 1, first_name: ‘Juca’, last_name: ‘Da Silva’, age: 42},
    {id: 2, first_name: ‘Daniel’, last_name: ‘Gonçalves’,  age: 21},
    {id: 3, first_name: ‘Matheus’, last_name: ‘Garcia’, age: 28},
    {id: 4, first_name: ‘Gabriel’, last_name: ‘Dorneles’,  age: 21}
]
  • E.5 Imprima uma mensagem de saudação com o nome completo para cada um dos objetos.
Ex.:
Olá, Fulano de tal!
Olá, Juca da silva!
...
  • E.6 Imprima a soma das idades (sugestão: utilizar o método reduce)
  • E.7 Encontre o primeiro objeto que possui uma pessoa com a idade menor que 25 e imprima seu nome. Caso não encontre, imprima que nenhum resultado foi encontrado.
  • E.8 Imprima todos os elementos em que a idade é menor que 30.
  • E.9 Ordene o array de forma decrescente por idade, em caso de empate o desempate é pelo id(em ordem crescente).

Para o exercício seguinte, considere os arrays de objetos:

const movies = [
	{ id: 1, name: 'Joker' },
	{ id: 2, name: 'Parasite' },
	{ id: 3, name: 'Avengers' },
	{ id: 4, name: 'Her' }
]
const actors = [
	{ id: 1, name: 'Cho Yeo-jeong', movie_ids: [2] },
	{ id: 2, name: 'Robert Downey Jr.', movie_ids: [3] },
	{ id: 3, name: 'Joaquin Phoenix', movie_ids: [1, 4] },
	{ id: 4, name: 'Scarlett Johansson', movie_ids: [3] }
]
  • E.10 Faça uma função que receba 2 parâmetros: um array de movies e um array de actors. A função deve retornar um array de movies, onde cada movie possui a propriedade actors, que sera um array com os nomes dos atores. Por ex:
[
  {
	id: 99,
	name: 'Lorem Ipsum',
	actors: ['John Doe', 'Jane Doe']
  }
]

Desafio de front-end

O objetivo é fazer uma tela em que o usuário verá uma lista dos navers. Para obter a listagem dos navers, faça uma request utilizando a fetch api para o seguinte endpoint: https://my-json-server.typicode.com/naveteam/fake-api/navers. Use esse layout do figma para se basear na hora de montar a tela.

Desafio de back-end

O Sistema:

O sistema consiste em um banco de dados dos navers, possuindo informações como: nomes, datas de nascimento, cargo, tempo de empresa e projeto que participou. As datas de nascimento no banco de dados será estruturado por você, lembrando que é obrigatório as entidades de navers e projetos estarem relacionadas entre si. Deve ser possível saber em quais projetos um naver está e vice-versa.

O que deve ser entregue:

Deverá ser implementado uma API node.js no padrão RESTful que possibilite as funcionalidades descritas abaixo:

Junto a API, uma documentação de como testar o sistema é muito bem-vinda. Muitas vezes o README.md do projeto basta, porém também é interessante disponibizar documentação a partir de algum software para testar suas requests, recomendamos postman ou insomnia;

Tudo isso deve ser colocado em um repositório público do seu github.

Funcionalidades

  • Navers

    • (Index) Rota para listagem dos Navers.

      • O retorno esperado é um arrray com todos os navers, exemplo:
            [
                {
                    id: 1, 
                    name: Fulano, 
                    birthdate: 1998-06-12, 
                    admission_date: 2020-06-12,
                    job_role: Desenvolvedor
                },
                {
                    id: 2, 
                    name: Ciclano, 
                    birthdate: 1998-06-12, 
                    admission_date: 2018-06-12, 
                    job_role: Desenvolvedor
                }
            ]
        
    • (Show) Rota para detalhar informações de um único naver através de seu identificador

      • Além das informações do naver, trazer quais projetos este participou
      • O retorno esperado é um objeto contendo informações sobre o Naver, exemplo:
        {
            id: 1, 
            name: Fulano, 
            birthdate: 1998-06-12, 
            admission_date: 2020-06-12,, 
            job_role: Desenvolvedor
            projects: [
                { 
                    id: 3, 
                    name: Projeto muito Bom
                }
            ] 
        }
        
    • (Store) Rota de Criação de Naver

      • Recebe através do body da request os dados do naver e um vetor com os identificadores dos projetos que ele participa e cria um novo registro no banco de dados
            {
                name: Fulano, 
                birthdate: 1998-06-12, 
                admission_date: 2020-06-12,
                job_role: Desenvolvedor,
                projects: [3]
            }
        
      • O retorno esperado é o objeto do usuário criado
  • Projetos

    • (Index) Rota para listagem dos Projetos

      • O retorno esperado é um array com todos os projetos, exemplo:
            [
                {
                    id: 3, 
                    name: Projeto muito Bom
                },
                {
                    id: 5, 
                    name: Projeto Realmente Bom
                }
            ]
        
    • (Show) Rota para detalhar um projeto

      • Além das informações do projeto, trazer quais foram os navers que participaram
      • O retorno esperado é um objeto contendo informações sobre o projeto, exemplo:
                {
                    id: 3, 
                    name: Projeto muito Bom,
                    navers: [
                        {
                            id: 1, 
                            name: Fulano, 
                            birthdate: 1998-06-12,
                            admission_date: 2020-06-12, 
                            job_role: Desenvolvedor
                        }
                    ]
                }
        
    • (Store) Rota de Criação de Projeto

      • Recebe através do body da request os dados do projeto e um vetor com os identificadores dos navers que trabalham nele e cria um novo registro no banco de dados
            {
                name: Projeto Bom,
                navers: [1]
            }
        
      • O retorno esperado é o objeto do Projeto criado

Observações

As respostas da API devem ser em formato JSON como nos exemplos acima.

Sugestão de bibliotecas para montar a api:

  • Koa ou express
  • Alguma biblioteca para abstrair a camada de dados que preferir.
    • Knex
    • Bookshelf
    • Objection
    • Mongoose

Prefira o uso de um banco de dados relacional (postgresql, mysql, ...), sendo seu uso não obrigatório.
Para organizar a estrutura de seu projeto prefira o uso do padrão MVC sendo seu uso não obrigátório.
Será observado organização de código, legibilidade e melhor uso dos recursos da linguagem javascript.

Se durante o processo de desenvolvimento não conseguiu fazer algo, explique qual o impedimento que encontrou e como tentou resolver em uma seção Dificuldades do seu README.md e nos submite até onde chegou 😄

(BONUS) Exercício de Banco de Dados

Dado a seguinte estrutura do banco

banco

  • E.B.1 Crie um script que delete e crie todas as tabelas.
  • E.B.2 Faça um script que limpe e crie dados nas tabelas.
  • E.B.3 Faça uma querie que traga todos os navers ordenados pelo seu tempo de empresa admission_date.
  • E.B.4 Faça uma querie que traga todos os projetos com seus respectivos navers.
  • E.B.5 Faça uma querie que traga todos os projetos com sua quantidade de navers.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •