recursos-catolicos/backend/src/main/java/es/recursoscatolicos/DataInitializer.java

162 lines
6.3 KiB
Java
Executable File

package es.recursoscatolicos;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
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;
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
@RequiredArgsConstructor
@Slf4j
public class DataInitializer implements CommandLineRunner {
private final ParroquiaRepository parroquiaRepository;
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 {
if (versoBiblicoRepository.count() > 0) return;
log.info("Cargando versos bíblicos (Salmos + Proverbios)...");
ObjectMapper mapper = new ObjectMapper();
List<VersoBiblico> todos = new java.util.ArrayList<>();
cargarFuente(mapper, "salmos.json", "Salmos", todos);
cargarFuente(mapper, "proverbios.json", "Proverbios", todos);
versoBiblicoRepository.saveAll(todos);
log.info("Versos bíblicos cargados: {} en total.", todos.size());
}
private void cargarFuente(ObjectMapper mapper, String recurso, String fuente,
List<VersoBiblico> destino) throws Exception {
List<java.util.Map<String, Object>> items = mapper.readValue(
new ClassPathResource(recurso).getInputStream(),
new TypeReference<>() {}
);
items.forEach(s -> {
VersoBiblico v = new VersoBiblico();
v.setFuente(fuente);
v.setNumero(((Number) s.get("numero")).intValue());
v.setTexto((String) s.get("texto"));
destino.add(v);
});
}
private void cargarParroquias() {
if (parroquiaRepository.count() > 0) return;
log.info("Cargando datos de ejemplo...");
Parroquia p1 = saveParroquia("San José Obrero", "Calle Mayor, 12, Madrid");
Parroquia p2 = saveParroquia("Nuestra Señora del Pilar", "Avda. de la Paz, 5, Zaragoza");
Parroquia p3 = saveParroquia("Santa María de la Asunción", "Plaza de la Iglesia, 1, Sevilla");
saveGrupo("Catequesis infantil", p1);
saveGrupo("Catequesis de adultos", p1);
saveGrupo("Hogar de Misiones", p1);
saveGrupo("Cáritas parroquial", p1);
saveGrupo("Grupo de jóvenes", p1);
saveGrupo("Catequesis infantil", p2);
saveGrupo("Grupo de jóvenes", p2);
saveGrupo("Cáritas parroquial", p3);
log.info("Datos de ejemplo cargados correctamente.");
}
private void cargarCalendario() throws Exception {
if (calendarioRepository.count() > 0) return;
log.info("Cargando calendario litúrgico...");
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
List<CalendarioLiturgico> entradas = mapper.readValue(
new ClassPathResource("calendario-liturgico.json").getInputStream(),
new TypeReference<>() {}
);
calendarioRepository.saveAll(entradas);
log.info("Calendario litúrgico cargado: {} entradas.", entradas.size());
}
private Parroquia saveParroquia(String nombre, String direccion) {
Parroquia p = new Parroquia();
p.setNombre(nombre);
p.setDireccion(direccion);
return parroquiaRepository.save(p);
}
private void saveGrupo(String nombre, Parroquia parroquia) {
Grupo g = new Grupo();
g.setNombre(nombre);
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);
}
}
}