Uma API robusta para gerenciamento de produtos e categorias, construída com FastAPI, PostgreSQL e Docker como parte de um projeto de aprendizado.
Este projeto implementa um serviço RESTful completo com operações CRUD (Create, Read, Update, Delete) para produtos e suas respectivas categorias, utilizando uma stack de tecnologias moderna e conteinerizada.
- Backend: Python 3.11+
- Framework da API: FastAPI
- Banco de Dados: PostgreSQL
- ORM: SQLAlchemy
- Validação de Dados: Pydantic
- Conteinerização: Docker & Docker Compose
- Gerenciador de Pacotes: UV
- Automação de Tarefas: Makefile
- Gerenciamento de Ambiente: python-dotenv
O projeto foi estruturado seguindo princípios de código limpo e organização:
- Separação de Responsabilidades: O código é dividido em módulos claros (
models,schemas,crud,database,main), cada um com um propósito definido. - Injeção de Dependência: O FastAPI gerencia as sessões do banco de dados (
Depends), garantindo que cada requisição tenha uma sessão isolada e que ela seja fechada corretamente. - Configuração via Ambiente: As configurações sensíveis (como a URL do banco de dados) são carregadas de arquivos
.env, separando a configuração do código. - Automação de Comandos: Um
Makefilecentraliza os comandos mais comuns do projeto, simplificando o fluxo de trabalho de desenvolvimento. - Ambiente Portátil: Com o Docker, todo o ambiente (API + Banco de Dados) pode ser recriado de forma consistente em qualquer máquina.
Antes de começar, garanta que você tenha as seguintes ferramentas instaladas:
- Git
- Docker (recomenda-se o Docker Desktop)
- Python 3.11+ (necessário apenas para o modo de desenvolvimento local)
make(geralmente já instalado em macOS e Linux)
Siga os passos abaixo para configurar e rodar o projeto.
git clone [https://github.com/seu-usuario/ProdGen.git](https://github.com/seu-usuario/ProdGen.git)
cd ProdGenO projeto utiliza arquivos .env para configuração.
-
Para o Docker (Recomendado): Copie o arquivo de exemplo e preencha-o se necessário (os valores padrão já funcionam para o Docker).
cp .env.example .env
-
Para Desenvolvimento Local: Crie um arquivo
.env.localcom a URL do seu banco de dados PostgreSQL local.# .env.local DATABASE_URL="postgresql://seu_usuario:sua_senha@localhost:5432/prodgen_db"
Você pode rodar a aplicação de duas formas, usando os comandos do Makefile.
Este método sobe a API e o banco de dados em contêineres isolados.
# Constrói as imagens e inicia os contêineres
make docker-upPara parar os contêineres:
make docker-downEste método roda a API diretamente na sua máquina. Requer que você tenha um PostgreSQL rodando localmente.
# 1. Crie e ative o ambiente virtual
uv venv
# No macOS/Linux
source .venv/bin/activate
# No Windows
# .venv\Scripts\activate
# 2. Instale as dependências
uv pip install -r requirements.txt
# 3. Inicie o servidor com hot-reload
make devApós iniciar a aplicação (seja com Docker ou localmente), a API estará disponível em http://localhost:8000.
A documentação interativa (Swagger UI) está disponível em http://localhost:8000/docs.
-
Criar Categoria
- POST
/categories/ - Body (JSON):
{ "name": "Eletrônicos" }
- POST
-
Listar Categorias
- GET
/categories/
- GET
-
Criar Produto
- POST
/products/ - Body (JSON):
{ "name": "Notebook Pro", "description": "Notebook de alta performance", "price": 7500.50, "stock": 20, "category_id": 1 }
- POST
-
Listar Produtos
- GET
/products/
- GET
-
Obter um Produto Específico
- GET
/products/{product_id}
- GET
-
Atualizar um Produto
- PUT
/products/{product_id} - Body (JSON): (envie apenas os campos que deseja atualizar)
{ "price": 7299.00, "stock": 15 }
- PUT
-
Deletar um Produto
- DELETE
/products/{product_id}
- DELETE