Foro Hub API es un sistema backend robusto desarrollado en Spring Boot que implementa una API RESTful para gestionar un foro académico. La plataforma permite la autenticación de usuarios, la administración de cursos y la creación y discusión de tópicos (temas) relacionados.
Este proyecto replica el funcionamiento interno del foro de Alura, facilitando el aprendizaje colaborativo entre estudiantes, profesores y moderadores.
- Autenticación de usuarios mediante JWT
- CRUD de Tópicos
- CRUD de Cursos
- Registro de nuevos usuarios
- Control de acceso basado en roles (
ADMIN,MODERADOR,ESTUDIANTE) - Manejo centralizado de errores
- POST
/login - Descripción: Autentica al usuario y devuelve un token JWT.
- Body:
{ "login": "user@example.com", "clave": "password" } - Respuesta:
{ "jwtToken": "<token>" }
- POST
/registro - Descripción: Registra un nuevo usuario.
- Body:
{ "nombre": "John Doe", "email": "john@example.com", "clave": "password", "rol": "ESTUDIANTE" } - Respuesta:
{ "id": 1, "nombre": "John Doe", "email": "john@example.com", "rol": "ESTUDIANTE" }
- POST
/cursos - Body:
{ "nombre": "Nombre del Curso", "categoria": "Categoría" }
- GET
/cursos
- GET
/cursos/{id}
- PUT
/cursos/{id} - Body:
{ "nombre": "Curso Actualizado", "categoria": "Categoría Actualizada" }
- DELETE
/cursos/{id}
- POST
/topicos - Body:
{ "titulo": "Título del Tópico", "mensaje": "Contenido del mensaje", "autorId": 1, "cursoId": 1 }
- GET
/topicos
- GET
/topicos/{id}
- PUT
/topicos/{id} - Body:
{ "titulo": "Título Actualizado", "mensaje": "Mensaje Actualizado", "status": "SOLUCIONADO" }
- DELETE
/topicos/{id}
- Autenticación basada en JWT.
- Acceso restringido por roles:
/topicosy/cursos:GET: Requiere autenticación.POST,PUT,DELETE: Requiere rolADMINoMODERADOR.
400 Bad Request– Error de validación.401 Unauthorized– Token inválido o faltante.404 Not Found– Recurso no encontrado.500 Internal Server Error– Error inesperado del servidor.
| DTO | Descripción |
|---|---|
DatosRegistroUsuario |
Registro de usuarios |
DatosRespuestaRegistro |
Respuesta al registro |
DatosRegistroCurso |
Crear curso |
DatosActualizarCurso |
Actualizar curso |
DatosRespuestaCurso |
Respuesta de curso |
DatosRegistroTopico |
Crear tópico |
DatosActualizarTopico |
Actualizar tópico |
DatosRespuestaTopico |
Respuesta de tópico |
| Entidad | Descripción |
|---|---|
Usuario |
Representa un usuario del sistema |
Curso |
Representa un curso |
Topico |
Representa un tópico de discusión |
| Repositorio | Propósito |
|---|---|
UsuarioRepository |
Persistencia de usuarios |
CursoRepository |
Persistencia de cursos |
TopicoRepository |
Persistencia de tópicos |
| Servicio | Funcionalidad |
|---|---|
UsuarioService |
Lógica de negocio para usuarios |
CursoService |
Lógica de negocio para cursos |
TopicoService |
Lógica de negocio para tópicos |
TokenService |
Generación y validación de JWT |
| Componente | Descripción |
|---|---|
SecurityFilter |
Filtro para validar tokens JWT |
TratadorDeErrores |
Manejo centralizado de errores |
-
Clona el repositorio:
git clone <url-del-repositorio> cd foro-hub-api
-
Configura la base de datos en
application.properties:spring.datasource.url=jdbc:mysql://localhost:3306/foro_hub spring.datasource.username=usuario spring.datasource.password=contraseña
-
Define la clave secreta JWT:
foro.jwt.secret=clave_super_secreta -
Ejecuta la aplicación:
./mvnw spring-boot:run
Este proyecto forma parte del Challenge Back End de Alura, en el cual replicamos el funcionamiento de un foro académico a nivel backend. El desarrollo se basa en prácticas ágiles, con tareas organizadas en un tablero Trello y entregas semanales. La principal meta es construir una API funcional que gestione tópicos, usuarios y cursos, aplicando autenticación y validaciones de negocio.
Este proyecto se encuentra bajo la licencia MIT.
