API GraphQL usando Strawberry GraphQL e SQLAlchemy seguindo os princípios da Clean Architecture.
- Python 3.8+
- SQLite (padrão) ou PostgreSQL
- Clone e instale as dependências:
git clone <repository-url>
cd strawberry-sqlalchemy
pip install -r requirements.txt- Configure as variáveis de ambiente:
cp env.example .env- Execute a aplicação:
python main.pyA aplicação estará disponível em http://localhost:8000/graphql
src/
├── domain/ # Entidades e interfaces
├── application/ # Casos de uso
├── infrastructure/ # Banco de dados e configurações
└── presentation/ # GraphQL (resolvers, schema)
# Obter todos os artistas
query get_artists {
artists {
uuid
name,
status
}
}
# Obter músicas de um artista
query music_by_artist {
musics_by_artist (artist_uuid: "26077a72-5f1f-4ffe-b1ce-63ab14556cef") {
uuid
title
artist_uuid
}
}# Criar artista
mutation add_artist ($ArtistInput: ArtistInput!) {
create_artist(data: $ArtistInput) {
uuid
name
}
}{
"ArtistInput": {
"name": "Eminem"
}
}# Criar música
mutation add_music ($MusicInput: MusicInput!) {
create_music(data: $MusicInput) {
uuid
title
}
}{
"MusicInput": {
"title": "My name is",
"artist_uuid": "26077a72-5f1f-4ffe-b1ce-63ab14556cef"
}
}pytest tests/- Entidade:
src/domain/entities/ - Repositório:
src/domain/repositories/(interface) +src/infrastructure/database/repositories.py(implementação) - Caso de Uso:
src/application/use_cases/ - Resolver:
src/presentation/graphql/resolvers.py - Container: Adicione dependências em
src/infrastructure/container.py
- ✅ Independência de Frameworks: Domínio não depende de frameworks externos
- ✅ Testabilidade: Fácil testar cada camada isoladamente
- ✅ Independência de UI: Lógica de negócio independente da interface
- ✅ Independência de Banco: Fácil trocar implementações de banco de dados
- ✅ Separação de Responsabilidades: Cada camada tem responsabilidade específica