Este repositório é uma API REST assíncrona construída com FastAPI, SQLAlchemy AsyncSession e SQLite. O projeto serve como uma base para um sistema de gamificação ou tracker de atividades com pontuação (XP) e streaks, esse projeto é feito para fins de estudo.
A API permite gerenciar usuários, autenticação JWT, categorias, atividades, logs de XP, saldos de XP, relacionamentos de usuário-atividade e streaks de produtividade.
fastapi- framework web assíncronouvicorn- servidor ASGIsqlalchemy- ORM para banco de dadosaiosqlite- driver SQLite assíncronopydantic- validação de dadospython-dotenv- carregamento de variáveis de ambientehttpx- cliente HTTP assíncronorequests- cliente HTTP síncronofastapi_users- autenticação e gerenciamento de usuários
Game_to_life_API/
├── main.py # inicializa o servidor
├── .env # variáveis de ambiente (secret, algorithm)
├── requirements.txt # dependências
├── README.md # este arquivo
├── app/
│ ├── app.py # aplicação FastAPI com todos os endpoints
│ ├── db.py # modelos SQLAlchemy e configuração assíncrona
│ ├── schemas.py # schemas Pydantic para validação
│ ├── users.py # (gerenciamento de usuários)
│ └── auth/
│ └── auth_handler.py # geração e validação de tokens JWT
└── test.db # banco SQLite gerado localmente
- Ative o ambiente virtual:
& .\.venv\Scripts\Activate.ps1- Inicie o servidor:
python main.pyOu com reload automático:
uvicorn main:app --reload- Acesse a documentação interativa:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
GET /- retorna mensagem de boas-vindas
POST /login- faz login comemailepassword, retornaaccess_tokenPOST /auth/jwt/login- rota alternativa de loginGET /users- lista usuários (⚠️ requer JWT no cabeçalhoAuthorization: Bearer <token>)
POST /user- cria novo usuário comemail,hashed_passwordenickname
POST /categories- cria categoria comcategory_nameecategory_descriptionGET /categories- lista todas as categorias
POST /activities- cria atividade comactivity_name,activity_description,difficulty_idecategory_idGET /activities- lista todas as atividades
POST /xplog- cria log de XP comuser_id,activity_ideamountGET /xplog- lista todos os logs de XPPOST /xpbalance- cria ou atualiza saldo de XP comuser_idetotal_xpGET /xpbalance- lista todos os saldos de XP
POST /user_activity- cria relacionamento usuário-atividade comuser_id,activity_id,status,started_atefinished_atGET /user_activity- lista todas as atividades de usuários
POST /difficulty- cria dificuldade comnameexp_multiplierGET /difficulty- lista todas as dificuldades
POST /streaks- cria streak comuser_id,current_streak,longest_streakelast_activity_dateGET /streaks- lista todos os streaks
O arquivo .env deve conter:
secret=a_super_secret_key_change_me_fast_:D
algorithm=HS256
Os tokens JWT têm validade de 10 minutos (600 segundos).
- O banco de dados usado é SQLite local (
test.db) - As tabelas são criadas automaticamente ao iniciar a aplicação
- A autenticação atual compara
hashed_passworddiretamente sem hashing real - Apenas o endpoint
GET /usersestá protegido por JWT no momento - Todos os IDs usam UUID (Universal Unique Identifier)
- As operações assíncronas garantem melhor performance em produção
- ✅ Implementar hashing seguro de senhas (
bcrypt,passlib) - ✅ Adicionar endpoints para atualizar (PUT/PATCH) e excluir (DELETE)
- ✅ Ampliar proteção JWT para mais endpoints
- ✅ Incluir testes automáticos com
pytest - ✅ Migrar para PostgreSQL ou MySQL em produção
- ✅ Adicionar documentação OpenAPI melhorada
- ✅ Implementar rate limiting
- ✅ Adicionar logs estruturados
✅ Todos os endpoints foram testados e estão funcionando:
- Criação de usuários
- Autenticação JWT
- CRUD de categorias, atividades, dificuldades
- Logs de XP e saldos de XP
- Relacionamentos usuário-atividade
- Streaks
Este projeto é um exemplo prático de backend assíncrono em Python utilizando padrões modernos e serve como base para futuros desenvolvimentos de sistemas de gamificação e rastreamento de produtividade.