Repositório contendo as instruções do processo seletivo para Desenvolvedor Backend na TerraQ em Jan/24.
Gostaria de informar que, devido a circunstâncias inesperadas, tive um tempo bastante restrito para realizar o teste técnico. Infelizmente, só pude dedicar três horas ao desenvolvimento do projeto, o que impactou diretamente na qualidade do trabalho final.
Dentre as limitações, destaco que não houve tempo suficiente para realizar testes adequados no código, tanto de funcionalidades quanto de integração. Apenas implementei o banco de dados e a imagem Docker às pressas, o que pode resultar em possíveis problemas não identificados.
Além disso, todo o processo foi conduzido de forma apressada, o que pode ter impactado na qualidade geral do código e na organização da estrutura do projeto.
Entendo a importância de entregar um trabalho completo e bem testado. Se tivesse mais tempo, poderia realizar testes mais abrangentes, refatorar o código, e garantir uma implementação mais robusta e segura.
Caso seja possível, gostaria de solicitar um prazo adicional de dois dias para aprimorar o projeto, realizar testes mais detalhados e garantir que todas as funcionalidades estejam corretas.
Agradeço pela compreensão e estou à disposição para discutir qualquer detalhe ou esclarecimento adicional.
Este teste foi criado para avaliar suas habilidades no desenvolvimento de uma aplicação backend que integre funcionalidades geoespaciais. O objetivo é criar uma API que interaja com um banco de dados PostgreSQL com a extensão PostGIS, fornecendo endpoints para manipulação e consulta de dados geoespaciais.
Seus objetivos são:
-
Instalar e Configurar PostGIS no PostgreSQL:
- Instale a extensão PostGIS no PostgreSQL.
- Configure o ambiente PostgreSQL com PostGIS nas migrations do Laravel. Isto deve ser feito para preparar o banco de dados para operações geoespaciais.
-
Criar Tabelas de Feições Geoespaciais:
- Tabela
municipios_geometria
: Para armazenar as geometrias dos municípios de SP e MG. Os municípios devem ser criados a partir dos GeoJSONs fornecidos. Esta tabela deve possuir os campos "id", "nome_municipio" e "geom". - Tabela
estados_geometria
: Para armazenar as geometrias dos estados de São Paulo (SP) e Minas Gerais (MG). Esta tabela deve ser criada processando os dados dos municípios de cada estado e realizando um join/dissolve para formar a geometria do estado. Esta tabela deve possuir os campos "id", "nome_estado" e "geom". - Crie as tabelas estados_geometria e municipios_geometria utilizando os geojson dos municípios de São Paulo e o geojson dos municípios de Minas Gerais como insumos.
- Tabela
pontos_usuario
: Para armazenar os pontos postados pelos usuários, com campos para "id", "latitude", "longitude", "municipio_id" e "geom". - PS: As colunas de geometrias das tabelas criadas devem ser do tipo Geometry e devem ter o nome "geom" e devem estar no SRID 4326.
- Tabela
-
Desenvolver Endpoints Específicos:
- Consulta por Latitude e Longitude (
/api/localizar-municipio
): Endpoint para receber latitude e longitude e retornar o município correspondente ou erro se não encontrado. - CRUD de Pontos (
/api/pontos
): Implemente um CRUD completo para manipular a tabela pontos_usuario, com os métodos POST, GET, PUT, DELETE.
- Consulta por Latitude e Longitude (
-
Instalar e Configurar PostGIS no PostgreSQL via migrations do Laravel
-
Criar Tabela
estados_geometria
-
Criar Tabela
municipios_geometria
-
Criar Tabela
pontos_usuario
-
Consulta por Latitude e Longitude (
/api/localizar-municipio
) -
CRUD de Pontos (
/api/pontos
) -
Criar um README.md com instruções adicionais de instalação e configuração do projeto
-
Enviar o link do repositório para o e-mail
- Cumprimento da lista de tarefas;
- Qualidade do Código: Limpeza, eficiência e organização do código.
- Git: Boas práticas e escrita nas mensagens de commits realizados;
- Facilidade de manutenção e extensão das novas funções implementadas;
- Processamento de Dados: Eficácia no manuseio e análise de dados geoespaciais.
- Visualização: Clareza, interatividade e estética da visualização de dados.
- Laravel: Utilização de recursos do framework Laravel para facilitar o desenvolvimento como migrations, models, controllers, rotas, etc.
- Use o estilo de código mais confortável à você;
- Os nomes de variáveis e comentários no código podem ser feitos em português ou inglês;
- Se o código submetido demandar instalações de quaisquer natureza, espera-se que hajam instruções de instalação no README;
- Feito é melhor que perfeito, submeta seus resultados ainda que estejam parcialmente incompletos.
- Neste teste não há pegadinhas ou detalhes escondidos, então não se preocupe em tentar procurá-los.
- O uso de ferramentas de IA como GitHub Copilot e ChatGPT é permitido (inclusive, incentivado) mas espera-se que o candidato tenha entendimento do código gerado e saiba explicá-lo, se perguntado.
-
Faça uma cópia do repositório, torne-o privado e adicione o usuário @abreufilho como colaborador usando o link abaixo:
-
Faça as alterações de modo a cumprir as tarefas deste teste, dê os commits necessários e o push final para o seu repositório remoto no GitHub, lembrando de fazê-lo antes do prazo final (09/01/2024 17:59h - Horário de Brasília).
-
Lembre-se de utilizar sua conta real do GitHub;
-
O tempo de entrega NÃO está sendo avaliado, mas envios após a data e hora limite serão desconsiderados.
-
Nenhum código desenvolvido neste teste será utilizado em produção/comercialmente pela TerraQ.
-
Ao concluir seu último push, envie um e-mail para antonio.abreu@terraq.com.br com cópia (CC) para talita.mendonca@terraq.com.br contendo somente o link para seu repositório no corpo do texto e o título do e-mail com as seguintes especificações ex.:
Título: Teste Backend - [Seu Nome]
Corpo do e-mail: https://github.com/{SEU_USUARIO}/backend-dev-jan-2024
Todos os candidatos receberão o aviso e acesso à este teste simultaneamente, portanto, todos terão exatamente o mesmo tempo e oportunidade.
Para começar, faça um repositório a partir da cópia do original acessando o link (lembre-se de logar com seu usuário GitHub)
Após a cópia, clone o repositório localmente:
git clone https://github.com/<SEU_USUARIO>/backend-dev-jan-2024.git
Instale as dependências do projeto:
docker compose up -d --build
docker compose exec app composer install
docker compose exec app npm install
Depois copie o arquivo .env.example
para .env
:
docker compose exec app cp .env.example .env
Crie um banco de dados temporário para a aplicação com o comando abaixo (ou crie-o manualmente, se preferir):
sudo -u postgres psql -c "CREATE DATABASE terraq_teste"
Depois, gere a chave da aplicação:
docker compose exec app php artisan key:generate
Rode a migração para criar as tabelas no banco de dados:
docker compose exec app php artisan migrate
E por fim, inicie o servidor local da Aplicação:
docker compose exec app php artisan serve
Acesse a aplicação em http://localhost:8989.
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432
DB_DATABASE=terraq_teste
DB_USERNAME=postgres
DB_PASSWORD=root
Este repositório utiliza Laravel 10, portanto, você pode consultar a documentação oficial em https://laravel.com/docs/9.x para mais informações.