Skip to content

geangobo/ProdGen

Repository files navigation

ProdGen API 📦

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.

✨ Tecnologias Utilizadas

  • 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

✅ Boas Práticas e Arquitetura

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 Makefile centraliza 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.

⚙️ Pré-requisitos

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)

🚀 Como Executar

Siga os passos abaixo para configurar e rodar o projeto.

1. Clonar o Repositório

git clone [https://github.com/seu-usuario/ProdGen.git](https://github.com/seu-usuario/ProdGen.git)
cd ProdGen

2. Configuração do Ambiente

O 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.local com a URL do seu banco de dados PostgreSQL local.

    # .env.local
    DATABASE_URL="postgresql://seu_usuario:sua_senha@localhost:5432/prodgen_db"

3. Executando a Aplicação

Você pode rodar a aplicação de duas formas, usando os comandos do Makefile.

Rodando com Docker (Método Recomendado)

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-up

Para parar os contêineres:

make docker-down

Rodando Localmente (Para Desenvolvimento)

Este 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 dev

Após iniciar a aplicação (seja com Docker ou localmente), a API estará disponível em http://localhost:8000.

Endpoints da API 📖

A documentação interativa (Swagger UI) está disponível em http://localhost:8000/docs.

Categorias

  • Criar Categoria

    • POST /categories/
    • Body (JSON):
      {
        "name": "Eletrônicos"
      }
  • Listar Categorias

    • GET /categories/

Produtos

  • Criar Produto

    • POST /products/
    • Body (JSON):
      {
        "name": "Notebook Pro",
        "description": "Notebook de alta performance",
        "price": 7500.50,
        "stock": 20,
        "category_id": 1
      }
  • Listar Produtos

    • GET /products/
  • Obter um Produto Específico

    • GET /products/{product_id}
  • Atualizar um Produto

    • PUT /products/{product_id}
    • Body (JSON): (envie apenas os campos que deseja atualizar)
      {
        "price": 7299.00,
        "stock": 15
      }
  • Deletar um Produto

    • DELETE /products/{product_id}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published