From 879d49c3c8fd0d1dcd3577c9f5ea76003322d840 Mon Sep 17 00:00:00 2001 From: alvaro Date: Sat, 20 Dec 2025 22:20:49 +0100 Subject: [PATCH 1/2] =?UTF-8?q?Implementaci=C3=B3n=20completa=20Contreras:?= =?UTF-8?q?=20CRUD,=20fake,=20publicar/despublicar,=20deleteAll?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persutil/api/ContrerasApi.java | 26 ++++ .../persutil/service/ContrerasService.java | 113 +++++++++++++++++- 2 files changed, 138 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/ausiasmarch/persutil/api/ContrerasApi.java b/src/main/java/net/ausiasmarch/persutil/api/ContrerasApi.java index 376bdca..5fd0de5 100644 --- a/src/main/java/net/ausiasmarch/persutil/api/ContrerasApi.java +++ b/src/main/java/net/ausiasmarch/persutil/api/ContrerasApi.java @@ -1,3 +1,4 @@ + package net.ausiasmarch.persutil.api; import org.springframework.beans.factory.annotation.Autowired; @@ -62,4 +63,29 @@ public ResponseEntity> getPage(Pageable oPageable) { public ResponseEntity count() { return ResponseEntity.ok(oContrerasService.count()); } + + // publicar post + @PutMapping("/publicar/{id}") + public ResponseEntity publicar(@PathVariable Long id) { + return ResponseEntity.ok(oContrerasService.publicar(id)); + } + + // despublicar post + @PutMapping("/despublicar/{id}") + public ResponseEntity despublicar(@PathVariable Long id) { + return ResponseEntity.ok(oContrerasService.despublicar(id)); + } + + // rellenar datos fake + @GetMapping("/rellena/{numPosts}") + public ResponseEntity rellenaContreras(@PathVariable Long numPosts) { + return ResponseEntity.ok(oContrerasService.rellenaContreras(numPosts)); + } + + // Borrar todos los posts + @DeleteMapping("/all") + public ResponseEntity deleteAll() { + oContrerasService.deleteAll(); + return ResponseEntity.noContent().build(); + } } diff --git a/src/main/java/net/ausiasmarch/persutil/service/ContrerasService.java b/src/main/java/net/ausiasmarch/persutil/service/ContrerasService.java index 19fc5cc..4acf67c 100644 --- a/src/main/java/net/ausiasmarch/persutil/service/ContrerasService.java +++ b/src/main/java/net/ausiasmarch/persutil/service/ContrerasService.java @@ -1,6 +1,7 @@ package net.ausiasmarch.persutil.service; import java.time.LocalDateTime; +import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -11,12 +12,99 @@ import net.ausiasmarch.persutil.repository.ContrerasRepository; @Service //Es necesatrio poner el @service para que lo detecten + public class ContrerasService { + //---------------------------GENERACION DE DATOS--------------------------- + + // Generar datos + public Long rellenaContreras(Long numPosts) { + + //Listas titulos y Contenidos + ArrayList titulos = obtenerTitulos(); + ArrayList contenidos = obtenerContenidos(); + + java.util.Random random = new java.util.Random(); + + for (long j = 0; j < numPosts; j++) { + ContrerasEntity fake = new ContrerasEntity(); + + int indiceAleatorio = random.nextInt(Math.min(titulos.size(), contenidos.size())); + fake.setTitulo(titulos.get(indiceAleatorio)); + fake.setContenido(contenidos.get(indiceAleatorio)); + // Generar etiquetas a partir del contenido + String contenidoParaEtiquetas = contenidos.get(indiceAleatorio); + String[] palabras = contenidoParaEtiquetas.split(" "); + // limpiar signos de puntuación y pasar a minúsculas + for (int i = 0; i < palabras.length; i++) { + palabras[i] = palabras[i].replace(".", "").replace(",", "").replace(";", "").replace(":", "").replace("!", "").replace("?", ""); + palabras[i] = palabras[i].toLowerCase(); + } + // seleccionar palabras de más de 4 letras + ArrayList alPalabrasFiltradas = new ArrayList<>(); + for (String palabra : palabras) { + if (palabra.length() > 4 && !alPalabrasFiltradas.contains(palabra)) { + alPalabrasFiltradas.add(palabra); + } + } + palabras = alPalabrasFiltradas.toArray(new String[0]); + String etiquetas = ""; + // Genenrar hasta 5 etiquetas aleatorias + int numEtiquetas = Math.min(5, palabras.length); + for (int i = 0; i < numEtiquetas; i++) { + String palabra = palabras[random.nextInt(palabras.length)]; + if (!etiquetas.contains(palabra)) { + etiquetas += palabra + ", "; + } + } + // eliminar la última coma y espacio + if (etiquetas.endsWith(", ")) { + etiquetas = etiquetas.substring(0, etiquetas.length() - 2); + } + // Asignar etiquetas generadas al post fake + fake.setEtiquetas(etiquetas); + fake.setFechaCreacion(LocalDateTime.now()); + fake.setFechaModificacion(fake.getFechaCreacion()); + fake.setPublico(random.nextBoolean()); + oContrerasRepository.save(fake); + } + return oContrerasRepository.count(); + } + + private ArrayList obtenerTitulos() { + ArrayList titulos = new ArrayList<>(); + titulos.add("La teoría de la relatividad"); + titulos.add("El Renacimiento italiano"); + titulos.add("La revolución digital"); + titulos.add("El origen del universo"); + titulos.add("La historia de la imprenta"); + titulos.add("Grandes civilizaciones antiguas"); + titulos.add("El arte del ajedrez"); + titulos.add("La música clásica europea"); + titulos.add("El impacto de internet"); + titulos.add("Cultura femboy en la sociedad"); + return titulos; + } + + private ArrayList obtenerContenidos() { + ArrayList contenidos = new ArrayList<>(); + contenidos.add("Albert Einstein revolucionó la física con la teoría de la relatividad, cambiando nuestra comprensión del espacio y el tiempo."); + contenidos.add("El Renacimiento fue una época de esplendor artístico y científico en Italia, con figuras como Leonardo da Vinci y Miguel Ángel."); + contenidos.add("La revolución digital ha transformado la comunicación, la economía y la vida cotidiana en todo el mundo."); + contenidos.add("El origen del universo es estudiado por la cosmología, destacando teorías como el Big Bang."); + contenidos.add("La invención de la imprenta por Gutenberg permitió la difusión masiva del conocimiento en Europa."); + contenidos.add("Civilizaciones como Egipto, Mesopotamia y Roma sentaron las bases de la cultura y la tecnología modernas."); + contenidos.add("El ajedrez es considerado un arte y una ciencia, practicado por millones de personas en todo el mundo."); + contenidos.add("Compositores como Mozart, Beethoven y Bach marcaron la historia de la música clásica europea."); + contenidos.add("Internet ha cambiado la forma en que accedemos a la información y nos conectamos globalmente."); + contenidos.add("La cultura femboy ha ganado visibilidad en la sociedad contemporánea, promoviendo la expresión de género diversa y la aceptación."); + return contenidos; + } + @Autowired ContrerasRepository oContrerasRepository; - // ----------------------------CRUD--------------------------------- + // ----------------------------CRUD--------------------------------- public ContrerasEntity get(Long id) { return oContrerasRepository.findById(id).orElseThrow(() -> new RuntimeException("Contreras not found")); } @@ -45,6 +133,11 @@ public Long delete(Long id) { return id; } + // Borrar todos los posts + public void deleteAll() { + oContrerasRepository.deleteAll(); + } + public Page getPage(Pageable oPageable) { return oContrerasRepository.findAll(oPageable); } @@ -53,4 +146,22 @@ public Long count() { return oContrerasRepository.count(); } + public Long publicar(Long id) { + ContrerasEntity entity = oContrerasRepository.findById(id) + .orElseThrow(() -> new RuntimeException("Contreras not found")); + entity.setPublico(true); + entity.setFechaModificacion(LocalDateTime.now()); + oContrerasRepository.save(entity); + return entity.getId(); + } + + public Long despublicar(Long id) { + ContrerasEntity entity = oContrerasRepository.findById(id) + .orElseThrow(() -> new RuntimeException("Contreras not found")); + entity.setPublico(false); + entity.setFechaModificacion(LocalDateTime.now()); + oContrerasRepository.save(entity); + return entity.getId(); + } + } \ No newline at end of file From c0266120e8c01585105c9cbc784fdb49fc2e0f62 Mon Sep 17 00:00:00 2001 From: alvaro Date: Mon, 22 Dec 2025 04:13:30 +0100 Subject: [PATCH 2/2] VFinal persutil --- .../net/ausiasmarch/persutil/api/ContrerasApi.java | 14 ++++++++++---- .../persutil/repository/ContrerasRepository.java | 3 ++- .../persutil/service/ContrerasService.java | 13 +++++++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/ausiasmarch/persutil/api/ContrerasApi.java b/src/main/java/net/ausiasmarch/persutil/api/ContrerasApi.java index 5fd0de5..bb29d06 100644 --- a/src/main/java/net/ausiasmarch/persutil/api/ContrerasApi.java +++ b/src/main/java/net/ausiasmarch/persutil/api/ContrerasApi.java @@ -52,11 +52,17 @@ public ResponseEntity delete(@PathVariable Long id) { return ResponseEntity.ok(oContrerasService.delete(id)); } - // listado paginado de posts + + // listar posts publicos (no login) @GetMapping("") - public ResponseEntity> getPage(Pageable oPageable) { + public ResponseEntity> getPagePublicos(Pageable oPageable) { + return ResponseEntity.ok(oContrerasService.getPageByPublico(true, oPageable)); + } + + // listar todos los posts + @GetMapping("/admin") + public ResponseEntity> getPageAdmin(Pageable oPageable) { return ResponseEntity.ok(oContrerasService.getPage(oPageable)); - } @GetMapping("/count") @@ -76,7 +82,7 @@ public ResponseEntity despublicar(@PathVariable Long id) { return ResponseEntity.ok(oContrerasService.despublicar(id)); } - // rellenar datos fake + // Rellenar posts @GetMapping("/rellena/{numPosts}") public ResponseEntity rellenaContreras(@PathVariable Long numPosts) { return ResponseEntity.ok(oContrerasService.rellenaContreras(numPosts)); diff --git a/src/main/java/net/ausiasmarch/persutil/repository/ContrerasRepository.java b/src/main/java/net/ausiasmarch/persutil/repository/ContrerasRepository.java index b4ae5ef..f9fed45 100644 --- a/src/main/java/net/ausiasmarch/persutil/repository/ContrerasRepository.java +++ b/src/main/java/net/ausiasmarch/persutil/repository/ContrerasRepository.java @@ -5,5 +5,6 @@ import net.ausiasmarch.persutil.entity.ContrerasEntity; public interface ContrerasRepository extends JpaRepository{ - + // Filtrar x publico + org.springframework.data.domain.Page findByPublico(boolean publico, org.springframework.data.domain.Pageable pageable); } diff --git a/src/main/java/net/ausiasmarch/persutil/service/ContrerasService.java b/src/main/java/net/ausiasmarch/persutil/service/ContrerasService.java index 4acf67c..9ea805a 100644 --- a/src/main/java/net/ausiasmarch/persutil/service/ContrerasService.java +++ b/src/main/java/net/ausiasmarch/persutil/service/ContrerasService.java @@ -73,8 +73,8 @@ public Long rellenaContreras(Long numPosts) { private ArrayList obtenerTitulos() { ArrayList titulos = new ArrayList<>(); - titulos.add("La teoría de la relatividad"); - titulos.add("El Renacimiento italiano"); + titulos.add("los melocotones"); + titulos.add("smash or pass"); titulos.add("La revolución digital"); titulos.add("El origen del universo"); titulos.add("La historia de la imprenta"); @@ -88,8 +88,8 @@ private ArrayList obtenerTitulos() { private ArrayList obtenerContenidos() { ArrayList contenidos = new ArrayList<>(); - contenidos.add("Albert Einstein revolucionó la física con la teoría de la relatividad, cambiando nuestra comprensión del espacio y el tiempo."); - contenidos.add("El Renacimiento fue una época de esplendor artístico y científico en Italia, con figuras como Leonardo da Vinci y Miguel Ángel."); + contenidos.add("¿Por qué los melocotones son tan populares en los memes? Descúbrelo aquí."); + contenidos.add("¿Smash or pass? El debate definitivo sobre personajes de videojuegos."); contenidos.add("La revolución digital ha transformado la comunicación, la economía y la vida cotidiana en todo el mundo."); contenidos.add("El origen del universo es estudiado por la cosmología, destacando teorías como el Big Bang."); contenidos.add("La invención de la imprenta por Gutenberg permitió la difusión masiva del conocimiento en Europa."); @@ -142,6 +142,11 @@ public Page getPage(Pageable oPageable) { return oContrerasRepository.findAll(oPageable); } + // Filtrar por publico + public Page getPageByPublico(boolean publico, Pageable oPageable) { + return oContrerasRepository.findByPublico(publico, oPageable); + } + public Long count() { return oContrerasRepository.count(); }