Este proyecto es una API REST para un foro de discusión. Fue desarrollado utilizando Spring Boot y permite a los usuarios crear, leer, actualizar y eliminar tópicos. Los usuarios deben autenticarse mediante JSON Web Tokens (JWT) para realizar ciertas acciones.
- Java 17 o superior
- Maven 3.6.3 o superior
- IDE de tu preferencia (recomendado IntelliJ IDEA)
- Postman o Insomnia para probar la API
git clone https://github.com/tu_usuario/foro-hub-challenge.git
cd foro-hub-challenge
-
Configura el archivo
application.properties
Crea un archivo
application.properties
ensrc/main/resources/
con el siguiente contenido:spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.h2.console.enabled=true spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=create-drop api.security.secret=your_jwt_secret
Asegúrate de reemplazar
your_jwt_secret
con una clave secreta segura para firmar los tokens JWT. -
Instala las dependencias de Maven
Navega hasta la raíz del proyecto y ejecuta el siguiente comando para instalar las dependencias necesarias:
mvn clean install
Ejecuta el siguiente comando en la raíz del proyecto:
mvn spring-boot:run
- Importa el proyecto como un proyecto de Maven.
- Ejecuta la clase
ForoApplication.java
desde tu IDE.
-
POST /auth/register
Registra un nuevo usuario.
{ "username": "user", "password": "password", "email": "user@example.com" }
-
POST /auth
Autentica un usuario y obtiene un token JWT.
{ "username": "user", "password": "password" }
-
GET /topics
Lista todos los tópicos.
-
POST /topics
Crea un nuevo tópico (requiere autenticación).
{ "title": "Título del Tópico", "message": "Mensaje del Tópico" }
-
DELETE /topics/{id}
Elimina un tópico por ID (requiere autenticación).
Puedes utilizar Insomnia o Postman para probar la API. A continuación se muestra una breve guía para probar los endpoints:
-
Registrar un usuario:
- URL:
POST http://localhost:8080/auth/register
- Body:
{ "username": "user", "password": "password", "email": "user@example.com" }
- URL:
-
Autenticar al usuario:
- URL:
POST http://localhost:8080/auth
- Body:
{ "username": "user", "password": "password" }
- Copia el token JWT de la respuesta.
- URL:
-
Crear un nuevo tópico:
- URL:
POST http://localhost:8080/topics
- Headers:
Authorization: Bearer <token>
- Body:
{ "title": "Título del Tópico", "message": "Mensaje del Tópico" }
- URL:
-
Listar todos los tópicos:
- URL:
GET http://localhost:8080/topics
- URL:
-
Eliminar un tópico:
- URL:
DELETE http://localhost:8080/topics/{id}
- Headers:
Authorization: Bearer <token>
- URL:
- Base de Datos: Se utiliza H2 en memoria para facilitar las pruebas y el desarrollo. En un entorno de producción, puedes cambiar la configuración para utilizar una base de datos diferente, como MySQL o PostgreSQL.
- Seguridad: La API utiliza JWT para la autenticación y autorización. Asegúrate de mantener tu clave secreta segura y de cambiarla regularmente.