ForoHub es una API REST desarrollada con Spring Boot que permite gestionar foros de discusión. A través de esta API, los usuarios pueden registrarse, crear temas de discusión, actualizar, listar y eliminar tópicos. La API también está protegida con autenticación JWT para garantizar que solo los usuarios autenticados puedan interactuar con los datos. Este proyecto fue creado para aprender sobre el desarrollo de APIs RESTful, autenticación con JWT, y el manejo de bases de datos con Spring Boot.
-
Autenticación de usuario
Los usuarios pueden iniciar sesión utilizando sus credenciales (correo y contraseña) para obtener un token JWT que les permite interactuar con los endpoints protegidos de la API. -
Registrar un tópico
Permite a los usuarios crear un nuevo tópico de discusión, proporcionando información como título, mensaje, fecha de creación, estado y curso asociado. -
Actualizar un tópico existente
Los usuarios pueden actualizar los detalles de un tópico ya creado, incluyendo su título, mensaje, estado y curso. -
Listar tópicos
Permite obtener una lista de todos los tópicos registrados, con paginación para facilitar la navegación. -
Eliminar un tópico
Los usuarios pueden eliminar un tópico de la base de datos proporcionando su ID. -
Protección con JWT
Todas las rutas (excepto la de login) requieren autenticación con un token JWT obtenido al iniciar sesión.
- Java 17 o superior instalado (puedes descargarlo desde aquí).
- Spring Boot: Framework principal utilizado para el desarrollo de la aplicación.
- PostgreSQL: Base de datos utilizada para almacenar la información.
- Instalar IntelliJ IDEA.
- Crear un nuevo proyecto Spring Boot con Java 17.
- Clonar el repositorio del proyecto desde:
git clone https://github.com/TuUsuario/ForoHub.git`
Configura tu base de datos PostgreSQL con los parámetros necesarios en el archivo application.properties.
Asegúrate de que la base de datos PostgreSQL esté configurada correctamente, y ejecuta las migraciones con Flyway para crear las tablas necesarias.
- Java 17: Lenguaje principal del proyecto.
- Spring Boot: Framework para crear aplicaciones Java de manera rápida y sencilla.
- Spring Security: Para la autenticación y autorización de usuarios mediante JWT.
- Spring Data JPA: Para la integración de Spring Boot con bases de datos, facilitando el acceso y manipulación de los datos.
- Flyway: Herramienta para gestionar las migraciones de la base de datos.
- PostgreSQL: Sistema de gestión de bases de datos utilizado para almacenar la información.
- Java JWT: Biblioteca utilizada para la creación y verificación de tokens JWT en Java, facilitando la implementación de la autenticación basada en JWT en el proyecto.
El proyecto utiliza las siguientes dependencias de Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
-
POST
/login:
Inicia sesión con las credenciales del usuario (correo y contraseña) y devuelve un token JWT.Ejemplo de cuerpo de la solicitud:
{
"correo": "juan.perez@example.com",
"contrasena": "contrasena"
}
Ejemplo de respuesta:
{
"jwtToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJmb3JvaHViIiwic3ViIjoianVhbi5wZXJlekBleGFtcGxlLmNvbSIsImlkIjoxLCJleHAiOjE3MzczNTc3NTJ9.AcU4_MLHNbSHacZRYl5wrjvDS1VDYh6u0Tptb9FnzUY"
}
-
Registrar un tópico
- POST
/topicos/create
Crea un nuevo tópico de discusión.
Ejemplo de cuerpo de la solicitud:
- POST
{
"titulo": "Problema con la base de datos",
"mensaje": "El sistema no está guardando los datos correctamente, ya revisé la conexión y los parámetros.",
"fechaDeCreacion": "2025",
"status": false,
"curso": "CONVERSOR"
}
Actualizar un tópico
- PUT
/topicos
Actualiza los detalles de un tópico ya existente.
Ejemplo de cuerpo de la solicitud:
{
"id": 1,
"titulo": "Gracias, ya pude...",
"mensaje": "Lo solucioné de la siguiente manera...",
"fechaDeCreacion": "2024",
"status": true,
"curso": "FORO"
}
-
Listar tópicos
- GET
/topicos
Obtiene una lista de todos los tópicos.
- GET
-
Eliminar un tópico
- DELETE
/topicos/{id}
Elimina un tópico específico por su ID.
- DELETE
Para acceder a los endpoints de creación, actualización, eliminación y listado de tópicos, es necesario incluir el encabezado Authorization con el token JWT obtenido en el login.
¡Las contribuciones son bienvenidas! Si deseas colaborar:
- Haz un fork del repositorio.
- Crea una rama con tu mejora:
git checkout -b mejora-nueva-funcionalidad. - Realiza un commit:
git commit -m "Añadir nueva funcionalidad". - Envía un pull request.