You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Seu ecossistema pessoal de leitura com gamificação
MyLibrary transforma o hábito de leitura em uma experiência gamificada e social.
Acompanhe seus livros, registre sessões, desbloqueie conquistas, mantenha seu streak e
dispute rankings com outros leitores — tudo isso com uma API robusta e um app mobile nativo.
# Clone o repositório
git clone https://github.com/gbatista/mylibrary.git
cd mylibrary/backend
# Configure as variáveis de ambiente
cp .env.example .env
# Edite o .env com suas credenciais do banco e JWT secret# Rode a aplicação
./mvnw spring-boot:run
Variáveis de ambiente necessárias:
Variável
Descrição
Exemplo
DB_URL
URL JDBC do PostgreSQL
jdbc:postgresql://localhost:5432/mylibrary
DB_USERNAME
Usuário do banco
postgres
DB_PASSWORD
Senha do banco
secret
JWT_SECRET
Chave secreta para assinar tokens
minha-chave-secreta-256-bits
2. Docker
cd mylibrary/backend
docker build -t mylibrary-api .
docker run -p 8080:8080 --env-file .env mylibrary-api
3. Mobile
cd mylibrary/mobile
npm install
npx expo start
📐 Diagrama de Entidades
erDiagram
USER ||--o{ BOOK : owns
USER ||--o{ CATEGORY : owns
USER ||--o{ SAGA : owns
USER ||--o{ READING_SESSION : registers
USER ||--o{ READING_GOAL : sets
USER ||--|| STREAK : has
USER ||--o{ ACHIEVEMENT : earns
USER ||--o{ REFRESH_TOKEN : authenticates
BOOK }o--o{ CATEGORY : tagged
BOOK }o--o| SAGA : belongs
READING_SESSION }o--|| BOOK : references
BOOK {
uuid id PK
string title
string author
string isbn
string genre
int pages
int rating
enum status
date startDate
date finishDate
}
USER {
uuid id PK
string name
string username UK
string email UK
string password
date birthDate
}
STREAK {
uuid id PK
date lastReadingDate
int currentStreak
int bestStreak
int totalReadingDays
}
Loading
🔄 Fluxo da Aplicação
flowchart LR
A[📱 Mobile App] -->|POST /auth/login| B[🔐 Auth]
B -->|JWT Token| A
A -->|Bearer Token| C[📚 Books API]
A -->|Bearer Token| D[⏱️ Sessions API]
D -->|Cria sessão| E{🎮 Gamification Engine}
E -->|Atualiza| F[🔥 Streak]
E -->|Avalia| G[🏆 Achievements]
C -->|Status: COMPLETED| E
H[📊 Stats API] -->|Agrega dados| C
H -->|Agrega dados| D
I[🏅 Leaderboard] -->|Ranking global| D
Loading
🛡️ Tratamento de Erros
Toda resposta de erro segue o padrão:
{
"status": 404,
"error": "Not Found",
"message": "Book not found with id: abc-123",
"path": "/books/abc-123",
"timestamp": "2026-03-29T14:00:00"
}
HTTP Code
Quando
400
Validação falhou (campos inválidos)
401
Token ausente ou expirado
403
Acesso proibido
404
Recurso não encontrado
409
Conflito (duplicatas, constraints)
500
Erro interno (nunca expõe stack trace)
🗺️ Roadmap
CRUD completo de Livros, Categorias e Sagas
Sistema de Sessões de Leitura
Autenticação JWT Multi-Device
Motor de Streak (hábitos diários)
Engine de 16 Conquistas
Analytics (DNA, Heatmap, Velocity, Year in Review)
Leaderboard Top 100 (5 métricas × 3 períodos)
Metas Anuais com progresso em tempo real
Busca avançada com Criteria API
Docker deploy
📱 Frontend mobile completo (Expo + React Native)
🔔 Push Notifications (FCM) baseadas em streaks e conquistas