ForoHub es una plataforma de foros desarrollada como parte del desafío de Alura Latam. Esta aplicación proporciona un espacio para que los desarrolladores discutan diversos temas, compartan conocimientos y resuelvan dudas en un ambiente colaborativo.
Adrian Daconte
- 🐱 GitHub: @Adrian-Daconte
- 💼 LinkedIn: Adrian Daconte
Puedes ver el video de demostración aquí:
Puedes ver una demostración en vivo de la aplicación aquí:
🔗 https://challengealura-forohub.onrender.com/topics/public/search_all Este enlace muestra todos los tópicos pre-cargados en la base de datos, demostrando la funcionalidad básica del foro.
Note
⏳ La aplicación está alojada en un servidor gratuito. El primer acceso puede tardar hasta 1-2 minutos mientras el servidor se inicia. Por favor, sea paciente.
Además, puedes explorar todos los endpoints de la aplicación a través de la interfaz de Swagger aquí:
📘 https://challengealura-forohub.onrender.com/swagger-ui.html
- 👤 Autenticación y autorización de usuarios
- 🔒 Implementación de JWT (JSON Web Tokens) para autenticación
- 🔑 Uso de BCryptPasswordEncoder para encriptar contraseñas
- 🔐 Gestión de roles y permisos de usuarios
- 🔄 Arquitectura STATELESS para mayor escalabilidad
- 📝 Creación y gestión de tópicos de discusión
- 💬 Sistema de comentarios en tópicos
- 🏷️ Uso de enums para categorías definidas dentro de las entidades
- Endpoints específicos según roles de usuario
- Respuestas API personalizadas (DataResponse y ApiResponse)
- Manejo de excepciones y validaciones de entrada
- Gestión automática de fechas de creación/actualización (utilizando @PrePersist y @PreUpdate de JPA)
- 📚 Swagger para documentación de endpoints
ForoHub está diseñado siguiendo una arquitectura modular
src
└── main
└── java
└── com.dako.forohub
├── authentication
│ ├── controller
│ ├── dto
│ └── service
├── comment
│ ├── controller
│ ├── dto
│ ├── repository
│ └── service
├── course
│ ├── domain
│ └── repository
├── infra
│ ├── config
│ ├── docs
│ ├── exceptions
│ ├── responses
│ └── security
├── topic
│ ├── controllers
│ ├── domain
│ ├── dtos
│ ├── repository
│ └── services
└── user
├── controller
├── domain
├── dtos
├── repositories
└── service
Esta estructura refleja una arquitectura modular y bien organizada:
· 🔐 authentication: Maneja la autenticación de usuarios. · 💬 comment: Gestiona la funcionalidad de comentarios. · 📚 course: Contiene la lógica relacionada con los cursos. · 🛠️ infra: Incluye configuraciones, documentación, manejo de excepciones, respuestas personalizadas y configuración de seguridad. · 📝 topic: Gestiona los tópicos del foro. · 👤 user: Maneja la información y lógica relacionada con los usuarios.
Cada módulo principal (authentication, comment, topic, user) sigue una estructura similar: · 🎮 controller: Maneja las solicitudes HTTP. · 📦 dto: Objetos de Transferencia de Datos para la comunicación entre capas. · 🏛️ domainl: Entidades y modelos de dominio. · 🗄️ repository: Interfaces para el acceso a datos. · ⚙️ service: Lógica de negocio.
Esta organización facilita el mantenimiento, la escalabilidad y la separación de responsabilidades en el proyecto. 🚀
- Java 21
- Spring Boot 3.4.1
- Spring Security
- Spring Data JPA
- PostgreSQL
- Maven
- Flyway para migraciones de base de datos
- Spring Boot Validation
- Lombok
- Auth0 java-jwt (versión 4.4.0)
- SpringDoc OpenAPI (para documentación de API, versión 2.8.1)
- Spring Boot DevTools
- Docker
-
Clonar el Repositorio:
- Clona el repositorio de ForoHub desde GitHub
- Navega al directorio del proyecto clonado
-
Configurar Variables de Entorno:
-
Crea un archivo
.enven la raíz del proyecto si no existe -
Añade las siguientes variables (ajusta los valores según sea necesario):
# Desarrollo POSTGRES_USER_DEV=root DB_DEV=dev PASSWORD_DB_DEV=123456 # Producción POSTGRES_USER_PROD=root DB_PROD=prod PASSWORD_DB_PROD=123456 # Pruebas POSTGRES_USER_TEST=root DB_TEST=test PASSWORD_DB_TEST=123456 # Token Api secret API_TOKEN_SECRET=123456789 # DataBase Real de produccion DATABASE_URL=jdbc:postgresql://localhost:5434/${DB_PROD}
-
-
Iniciar Servicios con Docker Compose: Utiliza el mismo archivo Docker Compose para todos los entornos, especificando el perfil adecuado:
-
Para desarrollo: Usa el comando Docker Compose con --profile dev
-
Para producción: Usa el comando Docker Compose con --profile prod
-
Para pruebas: Usa el comando Docker Compose con --profile test
-
-
Ejecutar la Aplicación:
-
Verificar la Aplicación:
