API RESTful para gerenciamento de sessões de estudo e acompanhamento de métricas de aprendizado
Documentação • Funcionalidades • Tecnologias • Instalação • Testes
A StudiesAPI é uma aplicação backend moderna desenvolvida com FastAPI que permite aos estudantes registrar, organizar e acompanhar suas sessões de estudo. A API fornece endpoints para CRUD completo de usuários e sessões, autenticação segura com JWT, e estatísticas pessoais de estudo.
- Organização: Permitir registro estruturado de sessões de estudo
- Acompanhamento: Fornecer métricas de tempo e tópicos estudados
- Segurança: Garantir isolamento de dados entre usuários
- Performance: Operações assíncronas para alto desempenho
| Feature | Descrição |
|---|---|
| JWT Token | Autenticação stateless com JSON Web Tokens |
| Refresh Token | Atualização de token sem necessidade de relogin |
| Password Hash | Senhas criptografadas com Argon2 |
| Ownership Validation | Usuários acessam apenas seus próprios recursos |
- ✅ Cadastro com validações (username, email, senha)
- ✅ Listagem com paginação e busca
- ✅ Atualização de dados pessoais
- ✅ Exclusão de conta
- ✅ Validação de unicidade (username/email)
- ✅ Registro de sessões com tópico, duração, notas e data
- ✅ Listagem filtrada por usuário
- ✅ Busca por tópico
- ✅ Atualização parcial ou completa
- ✅ Validação de posse (ownership)
- ✅ Total de sessões registradas
- ✅ Tempo total estudado (em minutos)
- ✅ Tópico mais estudado
| Tecnologia | Versão | Descrição |
|---|---|---|
| Python | 3.13+ | Linguagem de programação |
| FastAPI | 0.135+ | Framework web assíncrono |
| SQLAlchemy | 2.0+ | ORM com suporte async |
| Alembic | 1.18+ | Gerenciamento de migrações |
| Tecnologia | Versão | Descrição |
|---|---|---|
| PyJWT | 2.12+ | Geração e validação de tokens JWT |
| pwdlib | 0.3+ | Hash de senhas com Argon2 |
| Tecnologia | Versão | Descrição |
|---|---|---|
| Pydantic Settings | 2.13+ | Gerenciamento de configurações |
| python-dotenv | - | Carregamento de variáveis de ambiente |
| Tecnologia | Versão | Descrição |
|---|---|---|
| Poetry | 2.0+ | Gerenciador de dependências |
| Ruff | 0.15+ | Linter e formatter |
| pytest | 9.0+ | Framework de testes |
| pytest-asyncio | 1.3+ | Suporte a testes assíncronos |
| pytest-cov | 7.0+ | Coverage de testes |
| Tecnologia | Versão | Descrição |
|---|---|---|
| MKDocs | 1.6+ | Gerador de documentação |
| MKDocs Material | 9.7+ | Tema para documentação |
| pymdown-extensions | 10.21+ | Extensões Markdown |
- Python 3.13 ou superior
- Poetry 2.0 ou superior
- Git
# 1. Clone o repositório
git clone https://github.com/LuisGustavoCo/studies_api.git
cd studies_api
# 2. Instale as dependências
poetry install
# 3. Configure as variáveis de ambiente
cp .env.example .env
# Edite .env com suas configurações
# 4. Execute as migrações do banco
poetry run alembic upgrade head
# 5. Inicie o servidor de desenvolvimento
poetry run fastapi dev studies_api/app.pyA API estará disponível em http://127.0.0.1:8000
# Linting
poetry run task lint
# Formatação de código
poetry run task format
# Executar testes
poetry run task test
# Iniciar servidor de desenvolvimento
poetry run task run
# Servir documentação
poetry run task docsA StudiesAPI possui uma suíte de testes abrangente com 97% de coverage.
tests/
├── conftest.py # Fixtures e configurações
├── test_db.py # Testes de banco de dados
├── test_auth.py # Testes de autenticação
├── test_users.py # Testes de CRUD de usuários
├── test_study_sessions.py # Testes de CRUD de sessões
└── test_stats.py # Testes de estatísticas
# Rodar todos os testes com coverage
poetry run task test
# Rodar testes específicos
poetry run pytest tests/test_users.py -v
# Rodar com relatório HTML de coverage
poetry run pytest --cov=studies_api --cov-report=html
# Abra htmlcov/index.html no browser| Fixture | Descrição |
|---|---|
session |
Session do SQLAlchemy em memória |
client |
TestClient do FastAPI |
user |
Usuário cadastrado no banco |
user_data |
Dados do usuário de teste |
token |
Token JWT válido |
authenticated_client |
Client com header de autenticação |
study_session |
Sessão de estudo cadastrada |
session_data |
Dados da sessão de teste |
| Módulo | Coverage |
|---|---|
routers/auth.py |
100% |
routers/users.py |
98% |
routers/study_sessions.py |
100% |
routers/stats.py |
100% |
core/security.py |
93% |
| Total | 97% |
A API possui documentação Swagger UI e ReDoc integradas:
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
A documentação completa está disponível no diretório docs/ e pode ser visualizada localmente:
poetry run task docsAcesse http://127.0.0.1:8001 para visualizar.
| Arquivo | Descrição |
|---|---|
docs/index.md |
Página inicial |
docs/overview.md |
Visão geral do projeto |
docs/prerequisites.md |
Pré-requisitos |
docs/installation.md |
Guia de instalação |
docs/configuration.md |
Configuração de ambiente |
docs/guidelines.md |
Guidelines e padrões |
docs/structure.md |
Estrutura do projeto |
docs/api-endpoints.md |
Documentação da API |
docs/data-modeling.md |
Modelagem de dados |
docs/security.md |
Segurança e autenticação |
docs/development.md |
Guia de desenvolvimento |
docs/testing.md |
Testes |
docs/deploy.md |
Deploy |
docs/contributing.md |
Como contribuir |
| Método | Endpoint | Descrição | Auth |
|---|---|---|---|
GET |
/health_check |
Health check | ❌ |
POST |
/api/v1/auth/token |
Gerar token | ❌ |
POST |
/api/v1/auth/refresh_token |
Refresh token | ✅ |
POST |
/api/v1/users/ |
Criar usuário | ❌ |
GET |
/api/v1/users/ |
Listar usuários | ✅ |
GET |
/api/v1/users/{id} |
Buscar usuário | ✅ |
PUT |
/api/v1/users/{id} |
Atualizar usuário | ✅ |
DELETE |
/api/v1/users/{id} |
Deletar usuário | ✅ |
POST |
/api/v1/sessions/session |
Criar sessão | ✅ |
GET |
/api/v1/sessions/sessions |
Listar sessões | ✅ |
GET |
/api/v1/sessions/sessions/{id} |
Buscar sessão | ✅ |
PUT |
/api/v1/sessions/sessions/{id} |
Atualizar sessão | ✅ |
DELETE |
/api/v1/sessions/sessions/{id} |
Deletar sessão | ✅ |
GET |
/api/v1/stats/ |
Estatísticas | ✅ |
# 1. Criar usuário
curl -X POST "http://127.0.0.1:8000/api/v1/users/" \
-H "Content-Type: application/json" \
-d '{"username": "testuser", "email": "test@email.com", "password": "senha123"}'
# 2. Obter token
curl -X POST "http://127.0.0.1:8000/api/v1/auth/token" \
-H "Content-Type: application/json" \
-d '{"email": "test@email.com", "password": "senha123"}'
# 3. Criar sessão (use o token obtido)
curl -X POST "http://127.0.0.1:8000/api/v1/sessions/session" \
-H "Authorization: Bearer <SEU_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"topic": "Python", "duration_minutes": 60, "notes": "Estudo", "date": "2026-03-22"}'
# 4. Obter estatísticas
curl -X GET "http://127.0.0.1:8000/api/v1/stats/" \
-H "Authorization: Bearer <SEU_TOKEN>"studies_api/
├── studies_api/
│ ├── __init__.py
│ ├── app.py # Aplicação FastAPI
│ ├── core/
│ │ ├── database.py # Configuração do banco
│ │ ├── security.py # Autenticação e JWT
│ │ └── settings.py # Variáveis de ambiente
│ ├── models/
│ │ ├── base.py # Base do SQLAlchemy
│ │ ├── users.py # Modelo User
│ │ └── sessions.py # Modelo Session
│ ├── schemas/
│ │ ├── users.py # Schemas Pydantic User
│ │ ├── study_sessions.py # Schemas Pydantic Session
│ │ ├── auth.py # Schemas Pydantic Auth
│ │ └── stats.py # Schemas Pydantic Stats
│ └── routers/
│ ├── auth.py # Rotas de autenticação
│ ├── users.py # Rotas de usuários
│ ├── study_sessions.py # Rotas de sessões
│ └── stats.py # Rotas de estatísticas
├── tests/
│ ├── conftest.py # Fixtures pytest
│ ├── test_db.py # Testes de banco
│ ├── test_auth.py # Testes de auth
│ ├── test_users.py # Testes de usuários
│ ├── test_study_sessions.py # Testes de sessões
│ └── test_stats.py # Testes de stats
├── migrations/ # Migrações Alembic
├── docs/ # Documentação MKDocs
├── pyproject.toml # Dependências e config
├── alembic.ini # Config Alembic
├── mkdocs.yml # Config MKDocs
└── README.md # Este arquivo
# Configurações no .env
JWT_SECRET_KEY=sua_chave_secreta_aqui
JWT_ALGORITHM=HS256
JWT_EXPIRATION_MINUTES=30| Campo | Validação |
|---|---|
username |
Mínimo 6 caracteres |
password |
Mínimo 8 caracteres |
email |
Formato EmailStr válido |
notes |
Máximo 120 caracteres |
Todos os endpoints de sessões validam que o usuário autenticado é o proprietário do recurso, retornando 403 Forbidden em caso de violação.
# .env
DATABASE_URL=sqlite+aiosqlite:///./studies.db
JWT_SECRET_KEY=sua_chave_secreta
JWT_ALGORITHM=HS256
JWT_EXPIRATION_MINUTES=30Para deploy em produção, recomenda-se:
- Usar banco de dados PostgreSQL
- Configurar variáveis de ambiente seguras
- Usar servidor ASGI (uvicorn/gunicorn)
- Configurar HTTPS
- Implementar rate limiting
# Exemplo com uvicorn
uvicorn studies_api.app:app --host 0.0.0.0 --port 8000- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
- Siga o estilo de código definido pelo Ruff
- Adicione testes para novas funcionalidades
- Mantenha o coverage acima de 80%
- Documente novas features no MKDocs
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Luis Gustavo
- GitHub: @LuisGustavoCo
- Email: gustavoocorreia2005@gmail.com
| Métrica | Status |
|---|---|
| Testes | ✅ 82 testes passando |
| Coverage | ✅ 97% |
| Documentação | ✅ Completa |
| Type Hints | ✅ 100% |
| Async | ✅ Completo |
StudiesAPI © 2026 - Desenvolvido como estudo de FastAPI