O pc-preco é um microsserviço que gerencia e fornece os preços de produtos do seller do marketplace:
- Preço de custo
- Preço de venda
- Carlos Eduardo
- Eduardo Ribeiro
- João Lucas Ferreira
- Layza Nauane De Paula Silva
Você pode encontrar a documentação inicial referente a este projeto neste design docs
.
├── devtools/
└── info-projeto.md # Documento de levantamento da informação base- Linguagem: Python 3.12
- Framework: FastAPI
- Banco de Dados: PostgreSQL
- ORM: SQLAlchemy
- Migração: Alembic
- Autenticação e Autorização: Keycloak
- Caching: Redis
- Filas de mensagens: RabbitMQ
- Orquestração: Docker e Docker Compose
- Documentação da API: Swagger
- Testes: Pytest
- Qualidade: SonarQube
- IA: Ollama
Todos os comandos serão via terminal (Linux 🐧).
- Clone o projeto em sua máquina:
git clone https://github.com/projeto-carreira-luizalabs-2025/pc-preco.git- Crie o ambiente virtual:
# Linux
make build-venv
# Windows
python3.12 -m venv venv- Ative o ambiente virtual:
# Linux
source ./venv/bin/activate
# Windows
./venv/bin/activate- Instale as dependências
make requirements-dev- Copie o arquivo de ambiente
# Linux
make load-dev-env
# Windows
cp ./devtools/dotenv.dev .envQuaisquer comandos daqui para frente, iremos considerar que você está dentro
do ambiente virtual (venv).
- Configuração dos contêineres da aplicação
# Inicie os contêineres da aplicação (PostgreSQL, Keycloak, RabbitMQ, Redis e Ollama)
make docker-compose-up
# Se desejar parar e remover os contêineres, execute:
make docker-compose-down- Migração PostgreSQL
# Rode as migrações:
make migration
# ou
alembic upgrade headCom o ambiente virtual ativado, você pode rodar a aplicação executando:
# Linux
make run-dev
# Windows
uvicorn app.api_main:app --reloadNosso projeto utiliza filas para gerenciar o processamento assíncrono de tarefas, garantindo maior escalabilidade, desacoplamento e performance na aplicação.
Para criar as filas no RabbitMQ, execute o comando correspondente ao seu sistema operacional, em um novo terminal:
# Linux
make create-queue
# Windows
python -m devtools.scripts.queue.create_queueAlém das filas, temos workers responsáveis por consumir e processar as mensagens inseridas nelas.
Para executar os workers (o terminal deve permanecer aberto durante a execução), use:
# Linux
make worker
# Windows
python -m app.worker.worker_mainApós iniciar a aplicação (localmente ou via Docker), a documentação da API estará disponível nos seguintes endereços:
- Swagger UI: localhost:8000/api/docs
- ReDoc: localhost:8000/redoc
Os testes estão organizados na pasta tests/:
tests/
└── unit/ # Testes unitários de funções, serviços, modelos e repositórios
└── factories/ # Fábricas e mocks para facilitar a criação de objetos de teste
└── conftest.py # Fixtures globais do pytest- Modelos: Validação, criação e atualização de entidades.
- Serviços: Regras de negócio e fluxos principais.
- Repositórios: Operações de CRUD e acesso ao banco de dados.
- APIs: Testes de integração das rotas principais.
- Workers: Processamento assíncrono de tarefas, execução de rotinas em background e integração com sistemas externos.
Para rodar os testes automatizados do projeto, use os comandos abaixo:
# Linux
make test
# Windows
pytestPara verificar a cobertura dos testes, execute:
# Linux
make coverage
# ou
make coverage-html
# Windows
pytest --cov=app --cov-report=htmlO relatório será gerado na pasta htmlcov/. Você pode abrir o arquivo index.html em seu navegador para visualizar os detalhes.
- Inicie o SonarQube:
make docker-compose-sonar-up # Inicia o servidor SonarQube e seus serviços dependentes.ATENÇÃO: Se ocorrer o erro de vm.max_map_count, consulte Solução de Problemas
-
Gere o Token de Autenticação
- Acesse interface web do SonarQube: SonarQube
- Vá até: My Account > Security
- Gere um token de autenticação pessoal ( Guarde-o com segurança — ele não poderá ser visualizado novamente. )
-
No terminal, exporte as variáveis de ambiente:
export SONAR_TOKEN=<seu_token>
export SONAR_HOST_URL=http://localhost:9000- Execute o Scanner:
pysonar-scanner- Para encerrar o ambiente, utilize:
# Esse comando irá desligar e remover os contêineres do SonarQube.
make docker-compose-sonar-downAo finalizar, o SonarQube exibirá um relatório completo de qualidade do código na interface web.
Durante a inicialização do SonarQube, você pode se deparar com o seguinte erro:
vm.max_map_count [65530] is too lowEsse problema ocorre porque o Elasticsearch (utilizado pelo SonarQube) exige que vm.max_map_count seja pelo menos 262144.
Para ajustar esse parâmetro no seu sistema:
- Verifique o valor atual:
sysctl vm.max_map_countSe o valor for menor que 262144, prossiga com uma das seguintes opções:
- Aumente temporariamente (até o próximo reboot)
sudo sysctl -w vm.max_map_count=262144-
Torne o valor permanente
- Abra o arquivo de configurações:
sudo nano /etc/sysctl.conf
- Adicione a seguinte linha ao final do arquivo:
vm.max_map_count=262144
- Salve o arquivo e aplique a configuração
sudo sysctl -p
.
.
├── README.md # Documentação principal do projeto, instruções de uso e informações gerais.
├── alembic/ # Diretório de controle de versões de migrações do banco de dados (usando Alembic).
│ └── versions/ # Scripts de migração gerados pelo Alembic.
├── app/ # Código-fonte principal da aplicação.
│ └── api/ # Implementação da camada de API da aplicação.
│ └── common/ # Utilitários e código compartilhado entre módulos.
│ └── integrations/ # Integrações com sistemas externos (ex: APIs, filas, etc).
│ └── models/ # Definições de modelos de dados (ex: Pydantic, ORM).
│ └── repositories/ # Persistência e acesso a banco de dados.
│ └── services/ # Regras de negócio e lógica da aplicação.
│ └── settings/ # Configurações e variáveis de ambiente da aplicação.
│ └── worker/ # Implementação de workers e processamento assíncrono.
├── devtools/ # Ferramentas e scripts auxiliares para desenvolvimento.
│ └── api/ # Arquivos http para execução de rotas da api fora do swagger.
│ └── docker/ # Arquivos e configurações para Docker (ex: Dockerfile, docker-compose-sonar.yml).
│ └── keycloack-config/ # Configurações e scripts para Keycloak (autenticação/autorização).
│ └── scripts/ # Scripts automatizados usados no Makefile (ex: configuração de ambiente, filas).
│ └── info-projeto.md # Documento de levantamento de requisitos e informações do projeto.
├── requirements/ # Diretório com arquivos de dependências do projeto.
│ └── base.txt # Dependências principais da aplicação.
│ └── develop.txt # Dependências adicionais para desenvolvimento.
├── tests/ # Testes automatizados da aplicação.
│ └── factories/ # Fábricas de objetos para testes.
│ └── fixtures/ # Fixtures para testes.
│ └── unit/ # Testes unitários.
├── venv/ # Ambiente virtual Python (gerado localmente, não versionar).
├── makefile # Comandos automatizados para build, testes, lint, etc.
├── pyproject.toml # Configuração de ferramentas Python (ex: Black, isort, pytest).
├── requirements.txt # Lista geral de dependências.
├── sonar-project.properties # Configurações do SonarQube para análise de qualidade de código.O projeto está aberto a contribuições. O fluxo para contribuição é o seguinte:
- Realize um fork do repositório.
- Crie uma branch descritiva para a sua feature ou correção.
- Submeta um Pull Request.
- Aguarde o Code Review pela equipe de desenvolvimento.
- Após a aprovação, sua alteração será integrada ao código principal.