Skip to content

devPatuel/API_Frases_Celebres

Repository files navigation

Frases Célebres API

API REST desarrollada con Spring Boot 3 para la gestión de frases célebres, sus autores y categorías. Incluye autenticación con roles (Spring Security + Basic Auth), paginación, validación de datos, sistema de valoraciones (like/dislike) por usuario, "frase del día" programable y documentación interactiva con Swagger.

Proyecto realizado como práctica del módulo de Acceso a Datos del ciclo DAM.

Características

  • CRUD completo de frases, autores y categorías con DTOs de entrada/salida.
  • Autenticación y autorización por roles (ADMIN escribe, STANDARD solo lee, ambos pueden votar).
  • Frase del día: cada frase puede tener una fecha programada (única) y consultarse por fecha.
  • Valoraciones: cada usuario puede dar like/dislike a una frase (una valoración por usuario, actualizable).
  • Contador de visitas: consultar una frase por id incrementa sus visitas.
  • Búsqueda de frases por texto y ranking de las más votadas.
  • Paginación y ordenación en los listados (parámetros estándar de Spring Data: page, size, sort).
  • Manejo global de errores con respuestas de error uniformes.
  • Datos de ejemplo precargados al arrancar (20 autores, 5 categorías, 50 frases).

Stack tecnológico

Tecnología Uso
Java 17 Lenguaje
Spring Boot 3.2 Framework (Web, Validation)
Spring Data JPA / Hibernate Persistencia
Spring Security Autenticación Basic Auth + roles
PostgreSQL Base de datos
springdoc-openapi Documentación Swagger UI
Lombok Reducción de boilerplate
Gradle (Kotlin DSL) Build

Endpoints

Todas las rutas cuelgan del prefijo /api/v1 y requieren autenticación (Basic Auth).

Frases (/api/v1/frases)

Método Ruta Descripción Rol
GET /frases Listado paginado de frases STANDARD / ADMIN
GET /frases/{id} Detalle de una frase (incrementa visitas) STANDARD / ADMIN
GET /frases/dia?fecha=YYYY-MM-DD Frase del día (hoy si no se indica fecha) STANDARD / ADMIN
GET /frases/top?limit=10 Frases más votadas STANDARD / ADMIN
GET /frases/search?texto=... Búsqueda por texto (sin distinguir mayúsculas) STANDARD / ADMIN
GET /frases/liked Frases a las que el usuario autenticado dio like STANDARD / ADMIN
POST /frases Crear frase ADMIN
POST /frases/{id}/valoraciones Votar una frase (like/dislike) STANDARD / ADMIN
PUT /frases/{id} Actualizar frase ADMIN
DELETE /frases/{id} Borrar frase ADMIN

Autores (/api/v1/autores)

Método Ruta Descripción Rol
GET /autores Listado paginado de autores STANDARD / ADMIN
GET /autores/{id} Detalle de un autor STANDARD / ADMIN
POST /autores Crear autor ADMIN
PUT /autores/{id} Actualizar autor ADMIN
DELETE /autores/{id} Borrar autor ADMIN

Categorías (/api/v1/categorias)

Método Ruta Descripción Rol
GET /categorias Listado paginado de categorías STANDARD / ADMIN
GET /categorias/{id} Detalle de una categoría STANDARD / ADMIN
GET /categorias/{id}/frases Frases de una categoría (paginado) STANDARD / ADMIN
POST /categorias Crear categoría ADMIN
PUT /categorias/{id} Actualizar categoría ADMIN
DELETE /categorias/{id} Borrar categoría ADMIN

Usuarios y roles

La API utiliza Basic Auth (contraseñas almacenadas con BCrypt). Usuarios precargados para pruebas:

Username Password Rol Permisos
admin 1234 ADMIN Acceso total (GET, POST, PUT, DELETE)
user 1234 STANDARD Solo lectura (GET) + votar frases

Requisitos

  • Java: JDK 17 o superior.
  • Gradle: no hace falta instalarlo, se incluye el wrapper (./gradlew).
  • Base de datos: PostgreSQL.

Puesta en marcha

  1. Clonar el repositorio:
    git clone https://github.com/devPatuel/API_Frases_Celebres.git
    cd API_Frases_Celebres
  2. Configurar la base de datos:
    • Arranca PostgreSQL y crea la base de datos frases_db.
    • Ajusta la conexión en src/main/resources/application.properties si tu entorno difiere de los valores por defecto (host localhost:5433, usuario root, contraseña test).
    • No hace falta crear tablas ni datos: al arrancar, Hibernate genera el esquema (ddl-auto=create) y se cargan los datos de ejemplo de data.sql.
  3. Ejecutar la aplicación:
    ./gradlew bootRun
    La API queda disponible en http://localhost:8081.

Documentación API (Swagger / OpenAPI)

Con la aplicación levantada:

  • Swagger UI: http://localhost:8081/swagger-ui/index.html
  • OpenAPI JSON: http://localhost:8081/v3/api-docs

Ejemplo de petición y respuesta

Consultar la frase programada para una fecha:

curl -u user:1234 "http://localhost:8081/api/v1/frases/dia?fecha=2023-10-27"
{
  "id": 1,
  "texto": "La vida es aquello que te va sucediendo mientras te empeñas en hacer otros planes.",
  "fechaProgramada": "2023-10-27",
  "autorId": 1,
  "autorNombre": "Albert Einstein",
  "categoriaId": 1,
  "categoriaNombre": "Vida",
  "visitas": 120,
  "cantidadVotos": 0
}

Votar una frase (like):

curl -u user:1234 -X POST "http://localhost:8081/api/v1/frases/1/valoraciones" \
  -H "Content-Type: application/json" \
  -d '{"esLike": true}'

Capturas

1. Listar todas las frases (paginado)

Listar frases

2. Obtener la frase del día

Frase del día

3. Crear un nuevo autor (solo ADMIN)

Crear autor

Estructura del proyecto

src/main/java/com/jordipatuel/frasescelebres/
├── config/          # Configuración de seguridad y constantes
├── controller/rest/ # Controladores REST
├── dto/             # DTOs de entrada/salida
├── exception/       # Manejador global de excepciones
├── model/           # Entidades JPA
├── repository/      # Repositorios Spring Data
└── service/         # Lógica de negocio

About

API REST de frases célebres con Spring Boot 3: CRUD, roles con Spring Security, valoraciones y frase del día

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages