Entendendo a Estrutura do Nosso Projeto Monorepo
Bem-vindo(a) ao projeto! Você está entrando em um ambiente de desenvolvimento moderno e organizado, que utiliza uma estrutura de monorepo com vários serviços. Não se preocupe em entender tudo de uma vez. Este documento é um guia prático para você se familiarizar com a arquitetura e saber onde encontrar o que precisa. Muitas das técnicas e padrões serão aprendidas no dia a dia.
1. Visão Geral do Monorepo
Nosso projeto é um monorepo, o que significa que todo o código-fonte (frontend, backend, gateway) vive em um único repositório. Isso facilita a colaboração e a consistência entre os diferentes módulos.
Ele é composto por:
- 1 Frontend: Construído com Next.js (React).
- 5 Microserviços de Backend:
- 3 em Java: Usando Spring Boot.
- 1 em Python: Usando FastAPI e Peewee.
- 1 Gateway em Node.js: Usando Express e um Nginx como reverse proxy.
2. Estrutura de Pastas e Componentes
Vamos mergulhar na organização das pastas para você saber onde encontrar cada parte do projeto.
2.1. frontend/ (Next.js)
Aqui reside toda a aplicação web que os usuários finais interagem.
src/: Contém o código-fonte principal do Next.js.app/: As rotas do Next.js.(private)/: Páginas que exigem autenticação para acesso (ex:feedback/,userlist/).(public)/: Páginas de acesso público (ex:login/,setpassword/).
components/: Componentes React reutilizáveis por diversas páginas (ex:NavBar/).dtos/: Modelos de dados (Data Transfer Objects) que definem a estrutura das informações trocadas com o backend.services/: Funções para fazer chamadas à API do backend. É onde você vai configurar como o frontend "conversa" com os microserviços.utils/: Funções utilitárias gerais.__tests__/: Pasta para os testes da aplicação frontend.
- Arquivos de Configuração:
package.json,next.config.ts,tsconfig.json,Dockerfileetc. são arquivos de configuração do projeto Next.js e do ambiente de execução.
2.2. java_backend/ (Spring Boot)
Esta pasta agrupa os três microserviços Java.
libs/: Contém bibliotecas compartilhadas entre os microserviços Java.security/: Uma biblioteca de segurança customizada (JWT) que é reutilizada pelos outros microserviços. É aqui que está a lógica para lidar com tokens de autenticação.
microservices/: Cada subpasta aqui é um microserviço Java independente:feedbackrequest/: Responsável por gerenciar as solicitações de feedback.feedbackresponse/: Lida com as respostas de feedback.usermanagement/: Gerencia usuários (colaboradores, PDMs, administradores).
- Dentro de cada microserviço Java, você encontrará a seguinte estrutura prática (seguindo camadas de DDD simplificado):
controller/: Recebe as requisições HTTP do frontend (ou do gateway), valida a entrada e chama a camada deservice.service/: Contém a lógica de negócio principal. É aqui que você vai implementar as regras de como as coisas funcionam no nosso domínio. Ele usa osrepositorys para interagir com os dados.entity/: Representa as entidades do domínio, ou seja, os objetos que possuem uma identidade única e são persistidos no banco de dados (ex:User,FeedbackRequest).repository/: Interfaces que definem como oservicevai salvar, buscar ou atualizar asentitys no banco de dados. Ele abstrai os detalhes de como a comunicação com o banco de dados funciona.dto/: Classes para Data Transfer Objects (DTOs), usadas para receber dados das requisições e enviar dados nas respostas, facilitando a comunicação entre as camadas.exceptions/: Classes para tratar erros específicos da aplicação.configuration/: Configurações específicas do microserviço (ex: segurança, banco de dados).
pom.xml: Arquivos de configuração do Maven para cada microserviço e para o módulojava_backendcomo um todo, definindo as dependências.Dockerfile: Arquivos para construir as imagens Docker dos microserviços.
2.3. python_backend/ (FastAPI)
Aqui está o microserviço Python, que provavelmente cuida da visualização das respostas de feedback.
feedbackresponseview/: O diretório raiz do microserviço.app/: Contém o código-fonte da aplicação FastAPI.routes/: Onde você definirá os endpoints da API (equivalente aoscontrollers em Java).services/: Contém a lógica de negócio (similar à camadaserviceem Java).models/: Representa as entidades e modelos de dados para o Peewee (equivalente aentityedtoem Java, mas para Python/ORM).repositories/: Onde estará a lógica para interagir com o banco de dados usando Peewee (similar à camadarepositoryem Java).config/: Configurações da aplicação, como conexão com o banco de dados.auth/,exceptions/,middleware/: Outras pastas para organização de funcionalidades de autenticação, tratamento de erros e middlewares.
tests/: Pasta para os testes unitários e de integração do microserviço Python.pyproject.toml: Arquivo de configuração de projeto e dependências (similar aopom.xmloupackage.json).
Dockerfile: Arquivo para construir a imagem Docker do microserviço Python.
2.4. node_backend/ (Express Gateway)
Este é o nosso Gateway de API, construído com Node.js e Express.
api_gateway/: O diretório do gateway.src/: Contém o código do gateway.app.ts,index.ts: Arquivos principais onde a lógica de roteamento e proxy para os microserviços é definida.app.spec.ts: Testes para o gateway.
package.json,tsconfig.json: Arquivos de configuração do projeto Node.js.Dockerfile: Arquivo para construir a imagem Docker do gateway.
2.5. gateway/ (Nginx)
Esta pasta contém o arquivo de configuração do Nginx, que atua como um reverse proxy para direcionar as requisições para o Gateway Node.js e, posteriormente, para os microserviços corretos.
nginx.conf: O arquivo de configuração principal do Nginx.
3. Ferramentas e Padrões Essenciais
Nosso projeto segue algumas convenções e utiliza ferramentas específicas:
- Monorepo: Tudo no mesmo lugar.
- Docker e Docker Compose: Usamos para padronizar o ambiente de desenvolvimento e produção. Você encontrará
docker-compose-dev.yml(para desenvolvimento) edocker-compose.yml(para produção) na raiz. - Estrutura de Camadas (Controller, Service, Entity/Model, Repository): Esta é a organização principal de cada microserviço backend para separar responsabilidades.
- Controller: Lida com a entrada e saída da API (HTTP).
- Service: Contém a lógica de negócio.
- Entity/Model: Representa os dados e seu comportamento.
- Repository: Abstrai a comunicação com o banco de dados.
- JWT (JSON Web Tokens): Para autenticação de usuários, garantindo que apenas pessoas autorizadas acessem certas funcionalidades.
- Bitbucket Pipelines: Para automação de CI/CD (integração e entrega contínua), configurado no
bitbucket-pipelines.yml.
4. Próximos Passos e Onde Encontrar Ajuda
Não se sinta sobrecarregado(a)! A beleza do monorepo e da organização por camadas é que você pode focar em uma parte por vez.
- Para Começar: Concentre-se nas tarefas que lhe forem atribuídas. Entenda o
controller,serviceerepositorydaquele microserviço específico. - Documentação: Temos uma vasta documentação interna. Não hesite em consultá-la ou perguntar ao seu Tutor Tech Lead ou a um colega de equipe. Eles estão aqui para ajudar!
- Aprenda no Dia a Dia: Muitas das técnicas e padrões (como DDD, JWT, e os detalhes de cada framework) serão compreendidas à medida que você for desenvolvendo as funcionalidades. Não é necessário dominar tudo antes de começar.
Você está pronto(a) para embarcar nesta jornada. Qual parte da aplicação você está mais curioso(a) para explorar primeiro?