Desafio backend
Linguagem: Golang
Informações detalhadas sobre o desafio podem ser encontradas no arquivo README.ORIGINAL
.
Informações sobre estruturação do código e algumas anotações sobre ele podem ser encontradas no arquivo README.DEV
Sumário
Considerações feitas durante o desenvolvimento
-
Criar uma tabela "companies" (id,name:varchar(200),zip:varchar(5))
-
Para o enunciado abaixo:
The loaded data should have the following treatment: Existem várias possíveis abordagens, dentre elas:
- Abrir cada arquivo, tratar os dados e criar novos arquivos, CSV|sql
- Abrir cada arquivo, tratar os dados e já inserir no banco
- Importar diretamente no banco, e tratar os dados por lá (solução trivial)
Uma vez que não é especificado a abordagem, irei optar pela (3). Parte da (1ª abordagem já foi feita) e pode ser encontrada dentro do arquivo
tools/fileStream.7z
Este arquivo tem uma função para abrir pedaços de arquivos absurdamente grandes e então tratá-los. -
Pressupõe-se que tem um fluxo a ser respeitado, assim, terei que editar a tabela após esta ser criada e populada.
-
Tem alguns erros nos dados:
- tim dieball aparece 2x
- epicboardshop branch não tem addressZip
Dessa forma, é necessário fazer o matching usando os dois campos para poder inserir o terceiro
-
Como foi pedido para fazer os updates via HTTP, optei por criar a API primeiro, com boa parte das funções rest e então, usar um script para popular com as chamadas na API
-
Como não foi pedido documentação de endpoints e, dado que ficou apertado o prazo, optei por deixar isso como uma "melhoria futura" da implementação.
Como executar?
# - Cria o banco docker
# - Baixa os pacotes necessários para a aplicação
# - Roda a migration que altera a tabela inicial
make setup
# Roda a suíte de testes
make check
# Inicia a API
make start
# Executa o script que abre o arquivo q2 e envia os dados para uma rota específica da api
# este script precisa que um outro terminal esteja rodando o "make start", i.e, a api precisa estar online
make run
Migrations
As migrations são executadas usando o cli Soda. Para executar o Soda, você precisa resolver suas dependências
As migrations serão responsáveis por realizar a atualização do banco, preferencialmente, sem perder dados e mantendo uma compatibilidade com a estrutura já existente.
# Dentro da pasta src:
# Gerando uma migration
soda.exe generate fizz CreateCompaniesTable
# Executando as migrations
soda.exe migrate
# Revertendo as migrations
soda.exe migrate down
# Vendo os stauts das migrations
soda.exe migrate status
Dependências do Soda
Para executar as migrations você precisa ter um client do postgresql no path do seu sistema.
-
Windows:
-
Caso tenha o dbeaver instalado, uma solução é usar o client fornecido por eles. Bastando assim, apenas colocá-lo no path. O caminho para encontrar o local do client no dbeaver é:
Menu -> Database -> Driver Manager -> PostgreSQL -> Native Client
Com isto, você conseguirá copiar o path do client que eles baixam para o programa. Adicione o path no ambiente do sistema. Também é necessário criar uma cópia dos executáveis no local, porém, sem a extensão.exe
-
Ainda no Windows, você pode simplesmente instalar apenas as "Command Line Tools" durante a instalação do Postgresql
-
Por fim, uma outra abordagem utiliza o
WSL2
. Ao ter o WSL2 instalado, é possível utilizar a abordagem linux. Um outro benefício é o comando make, requisitado na configuração deste projeto
-
-
Linux:
# Caso esteja usando linux, basta instalar pelo apt
sudo apt install postgresql-client-common
DEV
# remove os módulos em cache
go clean -modcache
# path da pasta de apps
go env GOMODCACHE