Skip to content

brunapimenta/join-asbr

 
 

Repository files navigation

Teste de aptidões

Introdução

Para avaliar um pouco do seu conhecimento técnico e da sua forma de resolver problemas, propomos um breve desafio. Ele consiste em programar o backend (em PHP) de uma landing page simples, atendendo a algumas regras de negócio definidas abaixo.

A solução deve ser desenvolvida usando o Git como controle de versão, podendo ser via fork nesse repositório ou entregue por email ([email protected]). Para que possamos avaliar a sua evolução no projeto, pedimos que faça os commits progressivamente ao invés de um grande "commitão" no final. Inclua também todas as informações que achar relevantes para avaliarmos a sua possível contratação (github, linkedin e o que mais te der na telha).

Não temos um prazo estipulado para esse desafio, mas lembre-se que o processo seletivo já está em andamento.

Landing Page

Uma landing page é uma página simples voltada a convencer o visitante a efetuar uma conversão, que pode ser a aquisição de um determinado produto ou, no nosso caso, o preenchimento de um formulário contendo seus dados de contato (Lead).

Nossa equipe de negócios solicitou o desenvolvimento de uma landing page com um formulário subdividido em dois steps (descritos abaixo), com a devida validação e captura de dados.

Os dados capturados devem receber uma pontuação de acordo com regras estipuladas abaixo. Devem também ser gravados em banco de dados e enviados para uma API externa.

Recebemos dos designers um esboço do HTML final, que será estilizado por eles paralelamente. Portanto, o foco do projeto não deve ser o design da página em si, apenas o comportamento do formulário. Entretanto, caso precise fazer alguma adaptação na estrutura do HTML, fique à vontade ;)

Step 1

  • Nome Completo (No mínimo duas palavras contendo apenas caracteres de A a Z e suas possíveis acentuações.)
  • Data de Nascimento (No formato DD/MM/YYYY)
  • Email
  • Telefone

Step 2

Região

Norte, Nordeste, Sul, Sudeste ou Centro-Oeste

Unidade

Cada região possui um set diferente de unidades e isso deve ficar claro para o usuário no formulário:

  • Sul - Porto Alegre, Curitiba
  • Sudeste - São Paulo, Rio de Janeiro, Belo Horizonte
  • Centro-Oeste - Brasília
  • Nordeste - Salvador, Recife
  • Norte - Não possui disponibilidade

Pontuação

Cada lead terá uma pontuação (score) de 0 a 10 de acordo com os dados informados. Partindo da pontuação inicial 10, as seguintes condições modificam a pontuação:

Região

  • Sul: -2 pontos
  • Sudeste: -1 ponto, exceto quando unidade = São Paulo (que não modifica)
  • Centro-Oeste: -3 pontos
  • Nordeste: -4 pontos
  • Norte: -5 pontos

Idade

ATENÇÃO: Para o cálculo da idade, considerar a data atual fixa em 01/11/2016

  • A partir de 100 ou menor que 18: -5 pontos
  • Entre 40 e 99: -3 pontos
  • Entre 18 e 39: não modifica

Banco de dados

A modelagem e a tecnologia escolhida ficam a seu critério, mas queremos ver no código a implementação para inserir os dados no banco ;)

Envio de leads:

Os dados de cada lead deverão ser enviados via POST para o endpoint http://api.actualsales.com.br/join-asbr/ti/lead

Parâmetros esperados:

  • nome (String)
  • email (String)
  • telefone (String)
  • regiao (Elemento do conjunto ["Norte", "Nordeste", "Sul", "Sudeste", "Centro-Oeste"])
  • unidade (Elemento do conjunto ["Porto Alegre", "Curitiba", "São Paulo", "Rio de Janeiro", "Belo Horizonte", "Brasília", "Salvador", "Recife", "INDISPONÍVEL"])
  • data_nascimento (data no formato YYYY-mm-dd)
  • score (int de 0 a 10)
  • token (String)

Para obter o token basta acessar o link a seguir substituindo o email do parâmetro pelo seu. Ex: http://api.actualsales.com.br/join-asbr/ti/[email protected]

Uma vez obtido, o token não sofrerá alteração (mas poderá ser consultado novamente, caso necessário).

Dúvidas?

É só mandar um e-mail para [email protected].

Obrigado e boa sorte!

Resolução

Ferramentas

Back-end

Para back-end optei por usar Codeigniter, pois tenho mais familiaridade com o framework, o que me permitiu mais dinamicidade.

Front-end

  • Semantic UI: escolhi substituir Bootstrap pelo Semantic UI para deixa-lo mais fluído e divertido (ambos funcionam em conjunto, contudo para não deixar requisição acumulando, optei por remover a referência do Bootstrap do cabeçalho HTML);
  • Semantic UI Calendar Plugin: decidi usar um plugin para calendário uma vez que não são todos os navegadores que suportam o tipo date do HTML5, facilitando também na validação das datas selecionadas;
  • jMask Plugin: para a formatação do telefone e delimitação dos caracteres do nome, preferi usar um plugin de máscara;
  • Ajax: priorizei a utilização do Ajax também por ter mais familiaridade com o seu funcionamento.

Bruna Pimenta :squirrel:

About

Vagas ASBR

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 99.7%
  • Other 0.3%