Projeto desafiado para a vaga no time Martech da LuizaLabs no Magalu
Essas instruções permitirão que você obtenha uma cópia do projeto em operação na sua máquina local para avaliar.
Você precisa ter em sua máquina o Docker e o Docker Compose. Caso não tenha, siga os passos abaixo:
-
Windows (64 Bit). Utilizar o instalador
-
Linux
sudo apt update sudo apt remove docker docker-engine docker.io sudo apt install docker.io
Habilitar para que seu serviço seja iniciado automaticamente com o sistema:
sudo systemctl start docker sudo systemctl enable docker
Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/ download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Permissões
sudo chmod +x /usr/local/bin/docker-compose
-
Com Docker
-
Criar a imagem
cd server sudo docker build .
-
Rodar o container
sudo docker-compose up -d
-
Para ver os logs da aplicação
sudo docker logs server -f
-
-
Sem Docker:
cd server yarn install yarn dev
Aplicação servindo na porta 3333
Durante a execução do serviço, a documentação estará disponível em http://localhost:3333/api-docs, feita através do Swagger.
Os testes dos casos de uso foram feito com o Jest. Para rodar, basta digitar: yarn test
dentro da pasta server
SOLID - O projeto foi desenvolvido pensando em alguns princípios de SOLID, de modo que as classes fiquem bem definidas, fornecendo um maior reaproveitamento de código e criando um isolamento das funcionalidades. Mesmo eu não utilizando em projetos reais atualmente, particularmente acho que é um princípio de POO que deixa o código mais legível, elegante e mais fácil de dar manutenção no futuro.
SINGLETON - Utilizei o tsyringe para fazer a injeção de dependência com o objetivo de deixar o código mais limpo, concentrar as instâncias em apenas um lugar e injeta-las em todos os casos de uso da aplicação. Ou seja, aqui temos um cenário que não necessita de diversos objetos da PeopleRepository, que é onde está todos os métodos de acesso ao banco de dados e que todos os casos de uso utilizam. Do contrário, se tivesse utilizado a mesma classe repetidas vezes, poderia aumentar o consumo de memória. É um padrão que utilizo em alguns cenários atualmente, mas também, ficando claro que não são todas as classes que devem fornecer um ponto de acesso global e uma instância única.
MONGODB - Quando iniciei o projeto eu estava entre fazer uma tabela Pessoa com um Auto Relacionamento no PostgreSQL ou salvar como um documento NoSQL no MongoDB. Como o objeto é simples, optei pelo MongoDB através do Atlas, nuvem onde salvam os dados e configurações. A conexão dele está direto na API e, por estar em Cloud, não é necessario outro container específico para o banco de dados no Docker.
Modelo do objeto que está sendo salvo no banco:
{
id: 123,
name: Person 1,
friends: [
{
id: 1,
name: "Person 2"
},
{
id: 2,
name: "Person 3"
}
]
}
- Vanessa Ribeiro Koch - Desenvolvedora FullStack - GitHub
Obrigada pelo desafio 🤓
⌨️ com ❤️ por Vanessa Ribeiro Koch