Skip to content

ForoHub es una API REST que permite gestionar tópicos de un foro, con autenticación JWT y todas las operaciones CRUD necesarias. Los usuarios autenticados pueden crear, listar, actualizar y eliminar tópicos.

Notifications You must be signed in to change notification settings

Punkxbass/Foro-Hub---Challenge-Alura

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ForoHub - Challenge Alura 🚀

API REST para un foro desarrollada con Spring Boot 3 como parte del Challenge de Alura Latam.

📋 Descripción

ForoHub es una API REST que permite gestionar tópicos de un foro, con autenticación JWT y todas las operaciones CRUD necesarias. Los usuarios autenticados pueden crear, listar, actualizar y eliminar tópicos.

🛠️ Tecnologías Utilizadas

  • Java 21
  • Spring Boot 3.3.2
  • Spring Security
  • Spring Data JPA
  • H2 Database
  • JWT (JSON Web Tokens)
  • Swagger/OpenAPI 3
  • Maven
  • Bean Validation

⚙️ Configuración del Proyecto

Prerrequisitos

  • Java 21 o superior
  • Maven 3.6+
  • IDE (IntelliJ IDEA, Eclipse, VS Code)

Instalación

  1. Clona el repositorio:
git clone <tu-repositorio>
cd forohub
  1. Ejecuta el proyecto:
mvn spring-boot:run
  1. La aplicación estará disponible en: http://localhost:8080

🔐 Autenticación

La API utiliza JWT para autenticación. Para acceder a los endpoints protegidos:

1. Obtener Token

POST /auth/login
Content-Type: application/json

{
  "username": "admin",
  "password": "admin123"
}

Respuesta:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

2. Usar Token

Incluye el token en el header Authorization:

Authorization: Bearer <tu-token>

📚 Endpoints de la API

Autenticación

Método Endpoint Descripción Autenticación
POST /auth/login Iniciar sesión No

Tópicos

Método Endpoint Descripción Autenticación
GET /topicos Listar tópicos (paginado)
POST /topicos Crear nuevo tópico
GET /topicos/{id} Obtener detalle de tópico
PUT /topicos/{id} Actualizar tópico
DELETE /topicos/{id} Eliminar tópico

Otros

Método Endpoint Descripción Autenticación
GET / Estado de la API No
GET /health Health check No

📖 Documentación Swagger

Accede a la documentación interactiva en: http://localhost:8080/swagger-ui.html

💾 Base de Datos

Desarrollo (H2)

  • URL: http://localhost:8080/h2-console
  • JDBC URL: jdbc:h2:mem:forohubdb
  • Usuario: sa
  • Contraseña: (vacía)

Modelo de Datos

Tabla: topicos

  • id (Long, PK, Auto)
  • titulo (String, 160 chars, requerido)
  • mensaje (Text, requerido)
  • fecha_creacion (LocalDateTime, auto)
  • estatus (Enum: ABIERTO/CERRADO)
  • autor (String, 120 chars, requerido)
  • curso (String, 120 chars)
  • activo (Boolean, soft delete)

Tabla: usuarios

  • id (Long, PK, Auto)
  • username (String, único, requerido)
  • password (String, encriptado, requerido)
  • role (String, default: ROLE_ADMIN)

🧪 Ejemplos de Uso con Postman

1. Login

POST http://localhost:8080/auth/login
Content-Type: application/json

{
  "username": "admin",
  "password": "admin123"
}

2. Crear Tópico

POST http://localhost:8080/topicos
Authorization: Bearer <token>
Content-Type: application/json

{
  "titulo": "Error en compilación",
  "mensaje": "Al ejecutar mvn compile me aparece este error...",
  "autor": "admin",
  "curso": "Java"
}

3. Listar Tópicos

GET http://localhost:8080/topicos?page=0&size=10&sort=fechaCreacion,desc
Authorization: Bearer <token>

🔒 Reglas de Negocio

  1. Tópicos únicos: No se permiten tópicos duplicados (mismo título y mensaje)
  2. Validación de campos: Todos los campos obligatorios deben estar presentes
  3. Autenticación requerida: Todos los endpoints (excepto login) requieren autenticación JWT
  4. Soft delete: Los tópicos eliminados se marcan como inactivos por defecto
  5. Paginación: Listados paginados por defecto (10 items por página)

🚀 Funcionalidades Implementadas

  • ✅ CRUD completo de tópicos
  • ✅ Autenticación y autorización JWT
  • ✅ Validación de datos con Bean Validation
  • ✅ Manejo global de excepciones
  • ✅ Documentación automática con Swagger
  • ✅ Paginación y ordenamiento
  • ✅ Soft delete
  • ✅ Prevención de duplicados
  • ✅ Configuración por perfiles (dev/prod)
  • ✅ Seeding de datos en desarrollo

📁 Estructura del Proyecto

src/main/java/com/alurachallenge/forohub/
├── api/
│   ├── dto/           # DTOs para requests/responses
│   ├── mapper/        # Mappers de entidades a DTOs
│   ├── AuthController.java
│   ├── RootController.java
│   └── TopicoController.java
├── infra/
│   ├── openapi/       # Configuración Swagger
│   ├── security/      # Configuración JWT y Security
│   ├── DevUserSeeder.java
│   └── GlobalExceptionHandler.java
├── model/
│   ├── Estatus.java
│   ├── Topico.java
│   └── Usuario.java
├── repository/
│   ├── TopicoRepository.java
│   └── UsuarioRepository.java
└── ForohubApplication.java

👨‍💻 Desarrollado por

Daniel Reyes - Challenge Alura Latam


📝 Notas de Desarrollo

Este proyecto fue desarrollado como parte del Challenge de Alura Latam, implementando todas las funcionalidades requeridas y siguiendo las mejores prácticas de Spring Boot y seguridad con JWT.

About

ForoHub es una API REST que permite gestionar tópicos de un foro, con autenticación JWT y todas las operaciones CRUD necesarias. Los usuarios autenticados pueden crear, listar, actualizar y eliminar tópicos.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages