Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Challenge ForoHub

Backend REST educativo desarrollado con Java y Spring Boot para gestionar publicaciones de un foro. El proyecto forma parte del aprendizaje de backend con Alura Latam y está orientado a practicar una arquitectura por capas, persistencia con JPA, MySQL y migraciones con Flyway.

Funcionalidad actual

La API expone actualmente dos operaciones sobre publicaciones (Post):

Método Endpoint Descripción
GET /api/posts Lista todas las publicaciones almacenadas
POST /api/posts Crea una nueva publicación

El proyecto no implementa actualmente actualización, eliminación, autenticación ni autorización. Esta documentación describe únicamente las capacidades presentes en el código fuente.

Arquitectura

La aplicación utiliza una estructura sencilla por capas:

HTTP request
    |
    v
PostController
    |
    v
PostService
    |
    v
PostRepository (Spring Data JPA)
    |
    v
MySQL

Capas principales

  • Controller: recibe las solicitudes HTTP y expone los endpoints REST.
  • Service: concentra la lógica de aplicación disponible para publicaciones.
  • Repository: utiliza Spring Data JPA para persistencia.
  • Model: define la entidad JPA Post.
  • Database migration: Flyway crea la tabla posts mediante una migración versionada.

Modelo Post

La entidad contiene actualmente:

  • id
  • title
  • content
  • author
  • createdAt

id se genera automáticamente y createdAt se inicializa con la fecha/hora de creación.

Stack

  • Java 17
  • Spring Boot 3.1.3
  • Spring Web
  • Spring Data JPA
  • Spring Validation
  • MySQL Connector/J 8.0.34
  • Flyway
  • Maven / Maven Wrapper
  • JUnit 5 / Spring Boot Test

Estructura del proyecto

ChallengeForoHub/
|-- pom.xml
|-- mvnw
|-- mvnw.cmd
|-- src/
|   |-- main/
|   |   |-- java/ChallengeForoHub/
|   |   |   |-- controller/PostController.java
|   |   |   |-- model/Post.java
|   |   |   |-- repository/PostRepository.java
|   |   |   `-- service/PostService.java
|   |   `-- resources/
|   |       |-- application.properties
|   |       `-- db/migration/V1__Create_Table.sql
|   `-- test/
|       `-- java/ChallengeForoHub/ChallengeForoHubApplicationTests.java
`-- HELP.md

Los artefactos generados por Maven (target/) no forman parte del código fuente y están excluidos mediante .gitignore.

Configuración de base de datos

La aplicación espera una base MySQL local llamada:

foro_hub

Las credenciales no se guardan en el código fuente. Deben proporcionarse mediante variables de entorno:

DB_USERNAME
DB_PASSWORD

Ejemplo en PowerShell:

$env:DB_USERNAME="tu_usuario"
$env:DB_PASSWORD="tu_password"

En Linux/macOS:

export DB_USERNAME="tu_usuario"
export DB_PASSWORD="tu_password"

La configuración actual usa:

jdbc:mysql://localhost:3306/foro_hub

y levanta el servidor en el puerto 8082.

Migraciones con Flyway

La migración inicial se encuentra en:

src/main/resources/db/migration/V1__Create_Table.sql

Esta migración crea la tabla posts con los campos usados por la entidad Post.

Ejecución

Requisitos

  • Java 17
  • MySQL

Windows

Desde la carpeta interna ChallengeForoHub:

.\mvnw.cmd spring-boot:run

Linux / macOS

./mvnw spring-boot:run

La API queda disponible en:

http://localhost:8082/api/posts

Ejemplos de uso

Listar publicaciones

GET /api/posts

Crear una publicación

POST /api/posts
Content-Type: application/json

Ejemplo de cuerpo:

{
  "title": "Primer tema",
  "content": "Contenido de ejemplo",
  "author": "Sergio"
}

Pruebas

El repositorio contiene actualmente una prueba básica de contexto de Spring Boot (contextLoads). No se incluyen todavía pruebas automatizadas de integración para los endpoints.

Alcance y mejoras futuras

Este repositorio es un proyecto educativo de backend. Algunas mejoras razonables para una futura iteración serían:

  • añadir DTOs y validaciones explícitas para requests/responses;
  • implementar manejo global de errores;
  • agregar endpoints de actualización y eliminación;
  • incorporar autenticación/autorización;
  • añadir pruebas unitarias e integración de la API;
  • documentar los endpoints con OpenAPI/Swagger;
  • incorporar CI para compilación y tests.

Autor

Desarrollado por Sergio Carey como parte del programa de formación de Alura Latam.

About

Educational REST backend built with Java 17, Spring Boot, Spring Data JPA, MySQL and Flyway, demonstrating layered architecture and database persistence.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages