Skip to content

andrehsvictor/Memorix-API

Repository files navigation

Memorix API

πŸ‡§πŸ‡· PortuguΓͺs

πŸ“š Sobre o Projeto

Memorix Γ© uma API REST robusta e completa para um sistema de aprendizado com flashcards que implementa algoritmos de repetiΓ§Γ£o espaΓ§ada. O sistema permite que usuΓ‘rios criem, gerenciem e estudem flashcards de forma eficiente, otimizando o processo de memorizaΓ§Γ£o atravΓ©s de tΓ©cnicas cientificamente comprovadas.

✨ Principais Funcionalidades

  • πŸ” AutenticaΓ§Γ£o Completa: Login local e OAuth2 com Google
  • πŸ‘€ Gerenciamento de UsuΓ‘rios: Registro, verificaΓ§Γ£o de email, redefiniΓ§Γ£o de senha
  • πŸ“¦ Baralhos (Decks): CriaΓ§Γ£o e organizaΓ§Γ£o de conjuntos de flashcards
  • πŸƒ Flashcards: Sistema completo de CRUD para cartΓ΅es de estudo
  • 🧠 RepetiΓ§Γ£o EspaΓ§ada: Algoritmo inteligente baseado no mΓ©todo SuperMemo
  • πŸ“Š EstatΓ­sticas: AnΓ‘lise detalhada do progresso de aprendizado
  • πŸ–ΌοΈ Upload de Imagens: Suporte para imagens nos flashcards
  • πŸ”” NotificaΓ§Γ΅es: Sistema de email para aΓ§Γ΅es importantes
  • πŸ“ˆ Monitoramento: MΓ©tricas com Prometheus e dashboards Grafana
  • πŸ”’ SeguranΓ§a: JWT tokens, validaΓ§Γ£o de dados, rate limiting

πŸ—οΈ Arquitetura e Tecnologias

Stack Principal

  • Java 21 com Virtual Threads para alta performance
  • Spring Boot 3.5.3 - Framework principal
  • Spring Security - AutenticaΓ§Γ£o e autorizaΓ§Γ£o
  • PostgreSQL - Banco de dados principal
  • MongoDB - Armazenamento de flashcards e reviews
  • Redis - Cache e sessΓ΅es
  • RabbitMQ - Mensageria assΓ­ncrona

Ferramentas de Desenvolvimento

  • Docker & Docker Compose - ContainerizaΓ§Γ£o
  • Flyway - Migrations de banco de dados
  • MapStruct - Mapeamento de objetos
  • OpenAPI/Swagger - DocumentaΓ§Γ£o da API
  • TestContainers - Testes de integraΓ§Γ£o
  • MinIO - Armazenamento de arquivos

Observabilidade

  • Prometheus - Coleta de mΓ©tricas
  • Grafana - VisualizaΓ§Γ£o de dados
  • Spring Actuator - Health checks e mΓ©tricas

πŸš€ Como Executar

PrΓ©-requisitos

  • Java 21+
  • Docker e Docker Compose
  • Maven 3.9+

Executando com Docker (Recomendado)

  1. Clone o repositΓ³rio:
git clone https://github.com/andrehsvictor/Memorix-API.git
cd Memorix-API
  1. Inicie os serviΓ§os de infraestrutura:
docker-compose -f docker-compose.dev.yml up -d
  1. Configure as variΓ‘veis de ambiente:
cp src/main/resources/application-dev.yml.example src/main/resources/application-dev.yml
# Edite o arquivo com suas configuraΓ§Γ΅es
  1. Execute a aplicaΓ§Γ£o:
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev

Executando Localmente

  1. Instale as dependΓͺncias:
./mvnw clean install
  1. Configure o banco de dados PostgreSQL e outros serviΓ§os

  2. Execute:

./mvnw spring-boot:run

πŸ“ Estrutura do Projeto

src/main/java/andrehsvictor/memorix/
β”œβ”€β”€ auth/           # AutenticaΓ§Γ£o e autorizaΓ§Γ£o
β”œβ”€β”€ card/           # Gerenciamento de flashcards
β”œβ”€β”€ deck/           # Gerenciamento de baralhos
β”œβ”€β”€ user/           # Gerenciamento de usuΓ‘rios
β”œβ”€β”€ review/         # Sistema de revisΓ£o
β”œβ”€β”€ image/          # Upload e gerenciamento de imagens
β”œβ”€β”€ common/         # UtilitΓ‘rios e configuraΓ§Γ΅es
└── MemorixApplication.java

πŸ”Œ API Endpoints

AutenticaΓ§Γ£o

  • POST /api/v1/auth/token - Login com credenciais
  • POST /api/v1/auth/google - Login com Google OAuth
  • POST /api/v1/auth/refresh - Renovar token
  • POST /api/v1/auth/revoke - Revogar token

UsuΓ‘rios

  • POST /api/v1/users - Registro de usuΓ‘rio
  • GET /api/v1/users/me - Perfil do usuΓ‘rio
  • PUT /api/v1/users/me - Atualizar perfil
  • PUT /api/v1/users/me/password - Atualizar senha
  • DELETE /api/v1/users/me - Deletar conta
  • POST /api/v1/users/verify-email - Verificar email
  • POST /api/v1/users/send-action-email - Enviar email de aΓ§Γ£o
  • POST /api/v1/users/me/send-email-change-verification - Enviar verificaΓ§Γ£o de mudanΓ§a de email
  • PUT /api/v1/users/email - Alterar email
  • POST /api/v1/users/reset-password - Redefinir senha

Baralhos

  • GET /api/v1/decks - Listar baralhos
  • POST /api/v1/decks - Criar baralho
  • GET /api/v1/decks/{id} - Obter baralho
  • PUT /api/v1/decks/{id} - Atualizar baralho
  • DELETE /api/v1/decks/{id} - Deletar baralho

Flashcards

  • GET /api/v1/cards - Listar todos os cartΓ΅es
  • GET /api/v1/cards/stats - EstatΓ­sticas gerais dos cartΓ΅es
  • GET /api/v1/cards/{cardId} - Obter cartΓ£o especΓ­fico
  • GET /api/v1/decks/{deckId}/cards - CartΓ΅es por baralho
  • GET /api/v1/decks/{deckId}/cards/stats - EstatΓ­sticas de cartΓ΅es por baralho
  • POST /api/v1/decks/{deckId}/cards - Criar cartΓ£o
  • PUT /api/v1/cards/{cardId} - Atualizar cartΓ£o
  • DELETE /api/v1/cards/{cardId} - Deletar cartΓ£o

Reviews (RevisΓ΅es)

  • GET /api/v1/reviews - Listar todas as revisΓ΅es
  • GET /api/v1/cards/{cardId}/reviews - RevisΓ΅es por cartΓ£o
  • POST /api/v1/cards/{cardId}/reviews - Criar revisΓ£o

Imagens

  • POST /api/v1/images - Upload de imagem

πŸ§ͺ Testes

# Executar todos os testes
./mvnw test

# Testes de integraΓ§Γ£o
./mvnw test -Dspring.profiles.active=test

# Coverage report
./mvnw test jacoco:report

πŸ“Š Monitoramento

🀝 Contribuindo

  1. FaΓ§a um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanΓ§as (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

πŸ“„ LicenΓ§a

Este projeto estΓ‘ sob a licenΓ§a MIT. Veja o arquivo LICENSE para mais detalhes.

πŸ‘€ Autor

Andre Victor


πŸ‡ΊπŸ‡Έ English

πŸ“š About the Project

Memorix is a robust and comprehensive REST API for a flashcard learning system that implements spaced repetition algorithms. The system allows users to create, manage, and study flashcards efficiently, optimizing the memorization process through scientifically proven techniques.

✨ Key Features

  • πŸ” Complete Authentication: Local login and OAuth2 with Google
  • πŸ‘€ User Management: Registration, email verification, password reset
  • πŸ“¦ Decks: Creation and organization of flashcard sets
  • πŸƒ Flashcards: Complete CRUD system for study cards
  • 🧠 Spaced Repetition: Intelligent algorithm based on SuperMemo method
  • πŸ“Š Statistics: Detailed learning progress analysis
  • πŸ–ΌοΈ Image Upload: Support for images in flashcards
  • πŸ”” Notifications: Email system for important actions
  • πŸ“ˆ Monitoring: Prometheus metrics and Grafana dashboards
  • πŸ”’ Security: JWT tokens, data validation, rate limiting

πŸ—οΈ Architecture and Technologies

Main Stack

  • Java 21 with Virtual Threads for high performance
  • Spring Boot 3.5.3 - Main framework
  • Spring Security - Authentication and authorization
  • PostgreSQL - Main database
  • MongoDB - Flashcards and reviews storage
  • Redis - Cache and sessions
  • RabbitMQ - Asynchronous messaging

Development Tools

  • Docker & Docker Compose - Containerization
  • Flyway - Database migrations
  • MapStruct - Object mapping
  • OpenAPI/Swagger - API documentation
  • TestContainers - Integration testing
  • MinIO - File storage

Observability

  • Prometheus - Metrics collection
  • Grafana - Data visualization
  • Spring Actuator - Health checks and metrics

πŸš€ How to Run

Prerequisites

  • Java 21+
  • Docker and Docker Compose
  • Maven 3.9+

Running with Docker (Recommended)

  1. Clone the repository:
git clone https://github.com/andrehsvictor/Memorix-API.git
cd Memorix-API
  1. Start infrastructure services:
docker-compose -f docker-compose.dev.yml up -d
  1. Configure environment variables:
cp src/main/resources/application-dev.yml.example src/main/resources/application-dev.yml
# Edit the file with your configurations
  1. Run the application:
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev

Running Locally

  1. Install dependencies:
./mvnw clean install
  1. Configure PostgreSQL database and other services

  2. Run:

./mvnw spring-boot:run

πŸ“ Project Structure

src/main/java/andrehsvictor/memorix/
β”œβ”€β”€ auth/           # Authentication and authorization
β”œβ”€β”€ card/           # Flashcard management
β”œβ”€β”€ deck/           # Deck management
β”œβ”€β”€ user/           # User management
β”œβ”€β”€ review/         # Review system
β”œβ”€β”€ image/          # Image upload and management
β”œβ”€β”€ common/         # Utilities and configurations
└── MemorixApplication.java

πŸ”Œ API Endpoints

Authentication

  • POST /api/v1/auth/token - Login with credentials
  • POST /api/v1/auth/google - Login with Google OAuth
  • POST /api/v1/auth/refresh - Refresh token
  • POST /api/v1/auth/revoke - Revoke token

Users

  • POST /api/v1/users - User registration
  • GET /api/v1/users/me - User profile
  • PUT /api/v1/users/me - Update profile
  • PUT /api/v1/users/me/password - Update password
  • DELETE /api/v1/users/me - Delete account
  • POST /api/v1/users/verify-email - Verify email
  • POST /api/v1/users/send-action-email - Send action email
  • POST /api/v1/users/me/send-email-change-verification - Send email change verification
  • PUT /api/v1/users/email - Change email
  • POST /api/v1/users/reset-password - Reset password

Decks

  • GET /api/v1/decks - List decks
  • POST /api/v1/decks - Create deck
  • GET /api/v1/decks/{id} - Get deck
  • PUT /api/v1/decks/{id} - Update deck
  • DELETE /api/v1/decks/{id} - Delete deck

Flashcards

  • GET /api/v1/cards - List all cards
  • GET /api/v1/cards/stats - General card statistics
  • GET /api/v1/cards/{cardId} - Get specific card
  • GET /api/v1/decks/{deckId}/cards - Cards by deck
  • GET /api/v1/decks/{deckId}/cards/stats - Card statistics by deck
  • POST /api/v1/decks/{deckId}/cards - Create card
  • PUT /api/v1/cards/{cardId} - Update card
  • DELETE /api/v1/cards/{cardId} - Delete card

Reviews

  • GET /api/v1/reviews - List all reviews
  • GET /api/v1/cards/{cardId}/reviews - Reviews by card
  • POST /api/v1/cards/{cardId}/reviews - Create review

Images

  • POST /api/v1/images - Upload image

πŸ§ͺ Testing

# Run all tests
./mvnw test

# Integration tests
./mvnw test -Dspring.profiles.active=test

# Coverage report
./mvnw test jacoco:report

πŸ“Š Monitoring

🀝 Contributing

  1. Fork the project
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“„ License

This project is under the MIT license. See the LICENSE file for more details.

πŸ‘€ Author

Andre Victor


🌟 Quick Links

πŸ“± Tech Stack Summary

Java Spring Boot PostgreSQL MongoDB Redis RabbitMQ Docker Prometheus Grafana

🎯 Project Status

Build Status Coverage Version License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages