EmailExportService.java
package com.archiweb.service;
import com.archiweb.model.User;
import com.archiweb.repository.UserRepository;
import org.springframework.stereotype.Service;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
@Service
public class EmailExportService {
private final UserRepository userRepository;
public EmailExportService(UserRepository userRepository) {
this.userRepository = userRepository;
}
/**
* Exporte les emails "opt-in" pour campagnes marketing.
* Si le champ optIn n’existe pas encore, on exporte tous les utilisateurs.
*/
public String exportEmailing() {
List<User> users = userRepository.findAll();
String filePath = "export_emailing.csv";
try (FileWriter writer = new FileWriter(filePath)) {
writer.write("email\n");
for (User user : users) {
// ✅ Sécurité : vérifie si opt-in existe via réflexion
boolean include = true;
try {
var field = user.getClass().getDeclaredField("optIn");
field.setAccessible(true);
Object value = field.get(user);
if (value instanceof Boolean) {
include = (Boolean) value;
}
} catch (NoSuchFieldException ignored) {
// Le champ optIn n'existe pas, on inclut par défaut
}
if (include && user.getEmail() != null) {
writer.write(user.getEmail() + "\n");
}
}
} catch (IOException | IllegalAccessException e) {
throw new RuntimeException("Erreur lors de l'export emailing", e);
}
return filePath;
}
}