API backend desenvolvida com FastAPI, PostgreSQL e SQLAlchemy.
- Python 3.11
- FastAPI - Framework web moderno e rápido
- SQLAlchemy 2.0 - ORM para banco de dados
- PostgreSQL - Banco de dados relacional
- Redis - Cache em memória para performance
- Poetry - Gerenciamento de dependências
- Docker & Docker Compose - Containerização
.
├── app/
│ ├── api/
│ │ └── v1/
│ │ ├── endpoints/ # Endpoints da API
│ │ └── router.py # Router principal da API v1
│ ├── core/
│ │ └── config.py # Configurações da aplicação
│ ├── db/
│ │ ├── base.py # Base declarativa do SQLAlchemy
│ │ └── session.py # Sessão do banco de dados
│ ├── models/ # Modelos do SQLAlchemy
│ ├── schemas/ # Schemas Pydantic
│ └── main.py # Ponto de entrada da aplicação
├── sql/ # Scripts SQL para criação do banco
├── docker-compose.yml # Configuração Docker Compose
├── Dockerfile # Dockerfile da aplicação
└── pyproject.toml # Dependências Poetry
- Python 3.11+
- Poetry
- PostgreSQL 15+
- Redis 7+ (opcional, para cache)
- Docker e Docker Compose (opcional)
Copie o arquivo .env.example para .env e ajuste as variáveis conforme necessário:
cp .env.example .envpoetry install# Iniciar PostgreSQL e Redis
docker-compose up -d db redis
# Executar scripts SQL
docker exec -i admin-api-db psql -U admin -d admindb < sql/001_create_databases_table.sql
docker exec -i admin-api-db psql -U admin -d admindb < sql/002_add_slug_to_databases.sql# Via psql
psql -h localhost -U admin -d admindb -f sql/001_create_databases_table.sql
# Ou conectar e executar
psql -h localhost -U admin -d admindb
\i sql/001_create_databases_table.sqldocker-compose up --buildpoetry run uvicorn app.main:app --reloadA API estará disponível em http://localhost:8000
Todos os scripts SQL estão no diretório sql/. Consulte sql/README.md para instruções detalhadas.
- 001_create_databases_table.sql - Cria estrutura completa (tabelas, enum, triggers)
- 999_drop_all.sql - Remove toda estrutura (
⚠️ apenas desenvolvimento)
# Iniciar servidor de desenvolvimento
poetry run uvicorn app.main:app --reload
# Ou
make runpoetry run pytest
# Ou
make test# Formatar código com Black
poetry run black app/
# Lint com Ruff
poetry run ruff check app/
# Type checking com MyPy
poetry run mypy app/
# Ou usar o Makefile
make format
make lintApós iniciar o servidor, acesse:
- Swagger UI: http://localhost:8000/api/v1/docs
- ReDoc: http://localhost:8000/api/v1/redoc
curl -X POST "http://localhost:8000/api/v1/databases/" \
-H "Content-Type: application/json" \
-d '{
"name": "My SQLServer DB",
"type": "sqlserver",
"connection_string": "Server=myserver;Database=mydb;User Id=sa;Password=pass;",
"description": "Production database",
"status": "active"
}'curl "http://localhost:8000/api/v1/databases/"
# Verificar se está usando cache (header X-Cache-Status)
curl -I "http://localhost:8000/api/v1/databases/"
# X-Cache-Status: HIT (cache) ou MISS (banco de dados)# Por UUID
curl "http://localhost:8000/api/v1/databases/{uuid}"
# Por slug
curl "http://localhost:8000/api/v1/databases/my-sqlserver-db"# Por UUID
curl -X PATCH "http://localhost:8000/api/v1/databases/{uuid}" \
-H "Content-Type: application/json" \
-d '{
"status": "inactive"
}'
# Por slug
curl -X PATCH "http://localhost:8000/api/v1/databases/my-sqlserver-db" \
-H "Content-Type: application/json" \
-d '{
"status": "inactive"
}'# Por UUID
curl -X DELETE "http://localhost:8000/api/v1/databases/{uuid}"
# Por slug
curl -X DELETE "http://localhost:8000/api/v1/databases/my-sqlserver-db"