Você está na página 1de 7

Node 24.

🧑‍🚀 O desafio tem como objetivo observar pontos relacionados a qualidade


e nível técnico no desenvolvimento da solução.

No desafio, a pessoa candidata terá todo o suporte e acompanhamento de uma


pessoa dev back-end da Loomi para tirar dúvidas, dar updates, etc. Assim como
também terá próximo a pessoa do time de Processo Seletivo para qualquer
suporte necessário!

Acordos
Gerenciamento das atividades em alguma plataforma de gestão de atividades
que precisa ser compartilhada com a pessoa técnica que está
acompanhando o desafio.

Adicionar as tasks realizadas

Realizar as estimativas de cada task do desafio (feito nos comentários do


card da task);

Quando concluída a task, adicionar o comparativo do quanto tempo levou


para execução (feito nos comentários do card da task);

Updates diários assíncrono para a pessoa dev em forma de audio de até 5


min ou mensagem escrita, contendo as informações:

Atividades realizadas

Próximos passos

Dificuldades ou impedimentos

Prazo para entrega do desafio: 14/03/2024, até 23:59.

Envio dos entregáveis por e-mail (eduardo@loomi.com.br,


camila@loomi.com.br);

Node 24.1 1
Pode sentir-se à vontade para tirar dúvidas relacionadas ao desafio durante o
tempo de execução de forma assíncrona.

Briefing da Solução
Desafio Técnico: Microsserviços em um Ambiente Bancário
Inovador
Contexto:
Você faz parte de uma equipe responsável por desenvolver um sistema bancário
inovador, onde a modularidade e a comunicação eficiente entre microsserviços
são cruciais. O objetivo é criar dois microsserviços distintos, um para gerenciar
transferências entre pessoas e outro para gerenciar detalhes de clientes,
incluindo dados bancários.
Comunicação Eficiente:
Os microsserviços têm a flexibilidade de se comunicar entre si, caso necessário.
Utilize esta capacidade para otimizar o sistema, garantindo que a troca de
informações seja eficiente e desacoplada.

Microsserviço de Transações (Transferências entre Pessoas)


1. Banco de Dados Relacional:

Escolher um banco de dados relacional, como PostgreSQL.

2. Endpoints Mínimos:

/api/transactions (POST): Inicia uma nova transferência.

Parâmetros: {senderUserId, receiverUserId, amount, description}.

Resposta: Retorna o status da transferência.

/api/transactions/{transactionId} (GET): Detalhes de uma transferência


específica.

Resposta: Retorna detalhes da transferência.

Node 24.1 2
/api/transactions/user/{userId} (GET): Lista de transferências de um usuário
específico.

Resposta: Retorna a lista de transferências.

3. Considerações Adicionais:

Implementar mecanismos de segurança, como autenticação e


autorização, dependendo dos requisitos específicos.

O formato dos endpoints mínimos não é obrigatória. Não se apegue


rigidamente aos parâmetros de entrada e de saída, tão como ao padrão
das URLs.

É encorajado a implementação de endpoints além dos mínimos sugeridos


de acordo com sua criatividade.

Template dos Microsserviços


Antes de iniciar o desenvolvimento de microsserviços, é crucial estabelecer uma
estrutura de template que promova consistência, boas práticas e facilidade de
manutenção. O template seguirá um conjunto de diretrizes para organização de
pastas, padronização de nomenclatura, configuração de ambientes e
implementação de recursos fundamentais. Esta abordagem visa melhorar a
coesão entre os serviços, facilitar a integração e garantir uma base sólida para o
desenvolvimento futuro.

Diretrizes do Template

1. Estrutura de Pastas:

Separação clara entre fontes, testes e recursos auxiliares.

Pastas específicas para modelos, controladores, serviços, configurações


e testes.

2. Padronização de Nomenclatura:

Uso consistente de nomes significativos para classes, métodos e


arquivos.

Convenção para endpoints seguindo as melhores práticas de RESTful.

Node 24.1 3
3. Logging e Monitoramento:

Implementação de logs estruturados para rastreamento de eventos.

Integração com ferramentas de monitoramento para métricas e alertas.

4. Testes Unitários e Integração:

Estrutura dedicada para testes unitários e de integração.

Utilização de bibliotecas e frameworks para facilitar a criação e execução


de testes.

5. Gerenciamento de Dependências:

Utilização de gerenciadores de pacotes para facilitar a gestão de


dependências.

Versionamento explícito de dependências para evitar surpresas durante


atualizações.

6. Segurança:

Implementação de práticas recomendadas de segurança, incluindo


validação de entrada, proteção contra ataques comuns e controle de
acesso.

7. Dockerização:

Configuração de Dockerfiles para a criação de imagens consistentes.

Utilização de Docker Compose para orquestração de microsserviços em


ambiente de desenvolvimento.

Microsserviço de Clientes
1. Banco de Dados Relacional:

Escolher um banco de dados relacional, como PostgreSQL.

2. Banco de Dados Não Relacional:

Escolher um banco de dados não relacional para cachear chamadas que


não mudam periodicamente. Exemplo: Redis.

Node 24.1 4
3. Endpoints Mínimos:

/api/users/{userId} (GET): Detalhes do cliente.

Resposta: Retorna informações do cliente, incluindo dados bancários


(agência e conta corrente).

/api/users/{userId} (PATCH): Atualização parcial de dados do cliente.

Parâmetros: Aceitará um subconjunto de {name, email, address,


bankingDetails}.

Resposta: Retorna o status da atualização.

/api/users/{userId}/profile-picture (PATCH): Atualização parcial da foto de


perfil.

Parâmetros: {profilePicture}.

Resposta: Retorna o status da atualização.

4. Complemento para Dados Bancários:

Os dados bancários (agência e conta corrente) podem ser incluídos no


objeto bankingDetails no modelo do usuário.

5. Considerações Adicionais:

A formato dos endpoints mínimos não é obrigatória. Não se apegue


rigidamente aos parâmetros de entrada e de saída, tão como ao padrão
das URLs. Estes são apenas exemplos do mínimo esperado. O diferencial
será adicionado pela sua criatividade. 😉
Microsserviços Abstratos
1. Interfaces com outros microsserviços:

Crie contratos com microsserviços hipotéticos, sem implementação


necessária, ou seja, apenas interfaces para simular a comunicação entre
ambientes distribuídos.

2. Simule possíveis chamadas entre um microsserviço real com um ou mais


dos abstratos:

Node 24.1 5
Segue um caso de uso hipotético: Dentro do microsserviço de
transferências, um possível cenário envolve a solicitação de uma chamada
ao microsserviço de notificações criar na base, uma vez que uma
transação é concluída com sucesso.

Comunicação entre Microsserviços


Broker de Mensageria (Kafka ou RabbitMQ):

Os microsserviços devem se comunicar entre si, utilizando o broker de


mensageria para notificações sobre a atualização dos dados bancários do
usuário, garantindo desacoplamento e eficiência na comunicação.

Considerações Finais
É incentivado a implementação de boas práticas de segurança.

Não se limite aos exemplos fornecidos, a criatividade e a extensão dos


recursos serão valorizadas.

Demonstre habilidades em dockerização dos serviços e deploy na AWS.

Avalie a qualidade do código, a documentação e a capacidade de resolução


de problemas durante a implementação.

Este desafio visa avaliar não apenas as habilidades técnicas, mas também a
capacidade de design, inovação e resolução de problemas em um contexto do
mundo real.

Pontos que serão avaliados


Uso do GitHub e Gitflow

Fluxograma da comunicação entre os serviços

Leitura e Modelagem de dados

Desenvolvimento de API seguindo a arquitetura REST

Conhecimentos sobre serviços de mensagaria

Node 24.1 6
Integração com serviço de envio de email

Conhecimentos básicos de segurança em APIs

Tratamento e validação de dados (Yup ou outra biblioteca)

Tratamento de erros (de preferência customizados)

Permissionamento (RBAC) para usuário

Criação e gerenciamento de banco de dados PostgreSQL em servidor local

Conhecimentos de arquitetura e Design Patterns

Utilizar Clean Architecture

Boas práticas de código (SOLID, KISS, DRY, YAGNI, CleanCode, ESLint)

Autogerenciamento e qualidade da entrega (prazos, prioridades,


comunicação)

Documentação da API com especificação OpenAPI (recomendação: Swagger)

Implementação de testes unitários, e2e

Uso de docker/docker compose

Deployar a API na AWS (ssh, EC2, security group)

Usar Aws S3 para armazenar arquivos estáticos

Node 24.1 7

Você também pode gostar