Merge remote-tracking branch 'refs/remotes/origin/main'
This commit is contained in:
commit
4ca6e72ab6
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue