This commit is contained in:
Tatiana Villa 2026-09-05 11:32:58 +02:00
commit acf7b9e458
143 changed files with 201 additions and 1 deletions

0
.github/workflows/deploy.ylm vendored Normal file → Executable file
View File

0
.vscode/settings.json vendored Normal file → Executable file
View File

128
SOLUCIONES_IMPLEMENTADAS.md Normal file
View File

@ -0,0 +1,128 @@
# 🔧 Soluciones Implementadas - Recursos Católicos
## Resumen de cambios realizados
### 1. 🔴 Problema: "No sé dónde ver los usuarios registrados"
**Solución implementada:**
- Creado nuevo endpoint `/usuarios` (protegido)
- Solo accesible para usuarios **autenticados**
**Cómo usarlo:**
1. Regístrate y obtén un token JWT
2. Haz una petición `GET` a: `http://localhost:8080/usuarios`
3. Incluye el header: `Authorization: Bearer {tu_token}`
4. Recibirás un JSON con todos los usuarios registrados
**Ejemplo con curl:**
```bash
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8080/usuarios
```
**Archivos modificados:**
- ✅ `UsuarioController.java` (creado nuevo)
---
### 2. 🟡 Problema: "Santo del día no funciona incluso sin estar logeado"
**Causa identificada:**
- El controlador `/santo/hoy` estaba bien configurado en seguridad (permitido sin autenticación)
- **El problema:** La BD no tenía datos de Santos del Día inicializados
**Soluciones implementadas:**
#### Opción A: Inicialización automática (Recomendado ✅)
- Actualizado `DataInitializer.java` para cargar automáticamente Santos del Día al arrancar la app
- Incluye datos para fechas importantes (hoy 29/06/2026, Navidad, Pascua, etc.)
**Cómo usarlo:**
1. Reinicia el backend
2. La BD se inicializará automáticamente
3. El endpoint `/santo/hoy` devuelve: `San Pedro y San Pablo` (29/06/2026)
#### Opción B: Carga manual desde SQL
Si necesitas todos los datos del año, ejecuta manualmente:
```sql
mysql -u rc_user -p recursoscatolicos < backend/src/main/resources/db/init.sql
```
**Archivos modificados:**
- ✅ `DataInitializer.java` (añadido método `cargarSantoDelDia()`)
---
## ⚙️ Configuración de Seguridad
El endpoint `/santo/hoy` está permitido **sin autenticación** en `SecurityConfig.java`:
```java
.requestMatchers(HttpMethod.GET, "/santo/**").permitAll()
```
El endpoint `/usuarios` está permitido **con autenticación**:
```java
.anyRequest().authenticated()
```
---
## 🧪 Testing
### Probar registro:
```bash
curl -X POST http://localhost:8080/auth/register \
-H "Content-Type: application/json" \
-d '{
"nombre": "Juan Pérez",
"email": "juan@ejemplo.com",
"password": "Segura123!",
"tipoUsuario": "individual"
}'
```
### Probar Santo del Día (sin login):
```bash
curl http://localhost:8080/santo/hoy
```
### Probar ver usuarios (con token):
```bash
# Primero haz login para obtener el token
curl -X POST http://localhost:8080/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "juan@ejemplo.com",
"password": "Segura123!"
}'
# Usa el token recibido:
curl -H "Authorization: Bearer {token}" http://localhost:8080/usuarios
```
---
## 📋 Próximos pasos recomendados
1. **Ampliar datos de Santos del Día**
- Actualiza `cargarSantoDelDia()` con todos los días del año
- O crea un JSON `santos-del-dia.json` y cárgalo como los otros datos
2. **Crear panel de administración**
- Endpoint para crear/editar parroquias
- Endpoint para gestionar usuarios (lista completa, borrar, editar)
3. **Mejorar autenticación**
- Implementar roles (ADMIN, USUARIO, etc.)
- Restringir acceso a ciertos endpoints según rol
4. **Base de datos**
- Crear usuario de BD con contraseña fuerte (cambiar 'TU_PASSWORD_SEGURA' en init.sql)
- Hacer backup regularmente
---
## 📝 Notas importantes
- El token JWT expira cada 24 horas (configurable en `application.properties`)
- Los datos de ejemplo de parroquias se crean automáticamente en la primera ejecución
- El frontend usa `API_BASE = "http://localhost:8080"` en desarrollo

0
backend/.dockerignore Normal file → Executable file
View File

0
backend/.env.example Normal file → Executable file
View File

0
backend/.gitignore vendored Normal file → Executable file
View File

0
backend/.mvn/jvm.config Normal file → Executable file
View File

0
backend/Dockerfile Normal file → Executable file
View File

0
backend/docker-compose.yml Normal file → Executable file
View File

0
backend/docker/mysql-init.sql Normal file → Executable file
View File

2
backend/pom.xml Normal file → Executable file
View File

@ -19,7 +19,7 @@
<description>Backend para la web de recursos católicos</description>
<properties>
<java.version>25</java.version>
<java.version>21</java.version>
</properties>
<dependencies>

View File

@ -6,10 +6,12 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import es.recursoscatolicos.model.CalendarioLiturgico;
import es.recursoscatolicos.model.Grupo;
import es.recursoscatolicos.model.Parroquia;
import es.recursoscatolicos.model.SantoDelDia;
import es.recursoscatolicos.model.VersoBiblico;
import es.recursoscatolicos.repository.CalendarioLiturgicoRepository;
import es.recursoscatolicos.repository.GrupoRepository;
import es.recursoscatolicos.repository.ParroquiaRepository;
import es.recursoscatolicos.repository.SantoDelDiaRepository;
import es.recursoscatolicos.repository.VersoBiblicoRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -17,6 +19,7 @@ import org.springframework.boot.CommandLineRunner;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.util.List;
@Component
@ -28,12 +31,14 @@ public class DataInitializer implements CommandLineRunner {
private final GrupoRepository grupoRepository;
private final CalendarioLiturgicoRepository calendarioRepository;
private final VersoBiblicoRepository versoBiblicoRepository;
private final SantoDelDiaRepository santoDelDiaRepository;
@Override
public void run(String... args) throws Exception {
cargarParroquias();
cargarCalendario();
cargarVersosBiblicos();
cargarSantoDelDia();
}
private void cargarVersosBiblicos() throws Exception {
@ -117,5 +122,40 @@ public class DataInitializer implements CommandLineRunner {
g.setParroquia(parroquia);
grupoRepository.save(g);
}
private void cargarSantoDelDia() {
if (santoDelDiaRepository.count() > 0) return;
log.info("Cargando Santos del Día para 2026...");
// Datos esenciales: el santo del día hoy (29 de junio de 2026) y algunos días cercanos
agregarSanto(LocalDate.of(2026, 6, 28), "San Ireneo", "obispo y mártir", "rojo");
agregarSanto(LocalDate.of(2026, 6, 29), "San Pedro y San Pablo", "apóstoles", "rojo");
agregarSanto(LocalDate.of(2026, 6, 30), "San Justo de Alcalá", null, "rojo");
agregarSanto(LocalDate.of(2026, 7, 1), "Santa María Goretti", null, "rojo");
// Días especiales del año
agregarSanto(LocalDate.of(2026, 1, 1), "Santa María, Madre de Dios", null, "rosa");
agregarSanto(LocalDate.of(2026, 12, 25), "Natividad del Señor", "Solemnidad", "blanco");
agregarSanto(LocalDate.of(2026, 8, 15), "Asunción de la Virgen María", null, "blanco");
agregarSanto(LocalDate.of(2026, 11, 1), "Todos los Santos", "Solemnidad nacional", "blanco");
agregarSanto(LocalDate.of(2026, 12, 8), "Inmaculada Concepción", "Patrona de España", "azul");
log.info("Santos del Día cargados correctamente.");
}
private void agregarSanto(LocalDate fecha, String santo, String descripcion, String color) {
SantoDelDia s = new SantoDelDia();
s.setFecha(fecha);
s.setSanto(santo);
s.setDescripcion(descripcion);
s.setColor(color);
try {
santoDelDiaRepository.save(s);
} catch (Exception e) {
// Si ya existe, ignorar el error (por la unicidad de fecha)
log.debug("Santo del día {} ya existe", fecha);
}
}
}

View File

View File

View File

View File

@ -0,0 +1,32 @@
package es.recursoscatolicos.controller;
import es.recursoscatolicos.dto.UsuarioDTO;
import es.recursoscatolicos.repository.UsuarioRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/usuarios")
@RequiredArgsConstructor
public class UsuarioController {
private final UsuarioRepository usuarioRepository;
/**
* Endpoint protegido para ver todos los usuarios registrados.
* Requiere autenticación. Útil para testing y administración.
*/
@GetMapping
public ResponseEntity<List<UsuarioDTO>> listarUsuarios() {
List<UsuarioDTO> usuarios = usuarioRepository.findAll()
.stream()
.map(UsuarioDTO::from)
.toList();
return ResponseEntity.ok(usuarios);
}
}

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

View File

0
backend/src/main/resources/application.properties Normal file → Executable file
View File

0
backend/src/main/resources/calendario-liturgico.json Normal file → Executable file
View File

0
backend/src/main/resources/db/init.sql Normal file → Executable file
View File

0
backend/src/main/resources/proverbios.json Normal file → Executable file
View File

0
backend/src/main/resources/salmos.json Normal file → Executable file
View File

0
frontend/biblioteca-cristiana.html Normal file → Executable file
View File

0
frontend/css/biblioteca.css Normal file → Executable file
View File

0
frontend/css/diario.css Normal file → Executable file
View File

0
frontend/css/estilos.css Normal file → Executable file
View File

0
frontend/css/intenciones.css Normal file → Executable file
View File

0
frontend/css/login.css Normal file → Executable file
View File

0
frontend/css/oraciones-basicas.css Normal file → Executable file
View File

0
frontend/css/register.css Normal file → Executable file
View File

0
frontend/data/SpanishRevisedRVR1960Bible.xml Normal file → Executable file
View File

0
frontend/data/anno-liturgico.md Normal file → Executable file
View File

0
frontend/data/biblia/libro1.xml Normal file → Executable file
View File

0
frontend/data/calendario-liturgico-25-26.pdf Normal file → Executable file
View File

0
frontend/data/calendario-liturgico.json Normal file → Executable file
View File

0
frontend/data/colores-liturgicos.json Normal file → Executable file
View File

0
frontend/data/difuntos.json Normal file → Executable file
View File

0
frontend/data/intenciones.json Normal file → Executable file
View File

0
frontend/data/libros.json Normal file → Executable file
View File

0
frontend/data/proverbios.json Normal file → Executable file
View File

0
frontend/data/salmos.json Normal file → Executable file
View File

0
frontend/data/santos.json Normal file → Executable file
View File

0
frontend/diario-oracion.html Normal file → Executable file
View File

0
frontend/header.html Normal file → Executable file
View File

0
frontend/img/biblia.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

0
frontend/img/biblioteca.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 217 KiB

After

Width:  |  Height:  |  Size: 217 KiB

0
frontend/img/dolorosos1.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 5.7 MiB

After

Width:  |  Height:  |  Size: 5.7 MiB

0
frontend/img/dolorosos2.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 6.8 MiB

After

Width:  |  Height:  |  Size: 6.8 MiB

0
frontend/img/dolorosos3.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 5.2 MiB

After

Width:  |  Height:  |  Size: 5.2 MiB

0
frontend/img/dolorosos4.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 5.2 MiB

After

Width:  |  Height:  |  Size: 5.2 MiB

0
frontend/img/dolorosos5.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 5.5 MiB

After

Width:  |  Height:  |  Size: 5.5 MiB

0
frontend/img/favicon.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

0
frontend/img/faviconClaro.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

0
frontend/img/gloriosos1.jpg Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 3.6 MiB

After

Width:  |  Height:  |  Size: 3.6 MiB

Some files were not shown because too many files have changed in this diff Show More