use of com.redhat.cloud.notifications.models.InstantEmailTemplate in project notifications-backend by RedHatInsights.
the class EmailSubscriptionTypeProcessor method sendEmail.
private List<NotificationHistory> sendEmail(Event event, Set<Endpoint> endpoints, EmailTemplate emailTemplate) {
EmailSubscriptionType emailSubscriptionType = EmailSubscriptionType.INSTANT;
processedEmailCount.increment();
Action action = event.getAction();
TemplateInstance subject;
TemplateInstance body;
if (useTemplatesFromDb) {
Optional<InstantEmailTemplate> instantEmailTemplate = templateRepository.findInstantEmailTemplate(event.getEventType().getId());
if (instantEmailTemplate.isEmpty()) {
return Collections.emptyList();
} else {
String subjectData = instantEmailTemplate.get().getSubjectTemplate().getData();
subject = templateService.compileTemplate(subjectData, "subject");
String bodyData = instantEmailTemplate.get().getBodyTemplate().getData();
body = templateService.compileTemplate(bodyData, "body");
}
} else {
if (!emailTemplate.isSupported(action.getEventType(), emailSubscriptionType)) {
return Collections.emptyList();
}
subject = emailTemplate.getTitle(action.getEventType(), emailSubscriptionType);
body = emailTemplate.getBody(action.getEventType(), emailSubscriptionType);
}
if (subject == null || body == null) {
return Collections.emptyList();
}
Set<RecipientSettings> requests = Stream.concat(endpoints.stream().map(EndpointRecipientSettings::new), ActionRecipientSettings.fromAction(action).stream()).collect(Collectors.toSet());
Set<String> subscribers = Set.copyOf(emailSubscriptionRepository.getEmailSubscribersUserId(action.getAccountId(), action.getBundle(), action.getApplication(), emailSubscriptionType));
LOG.info("sending email for event: " + event);
return recipientResolver.recipientUsers(action.getAccountId(), action.getOrgId(), requests, subscribers).stream().map(user -> emailSender.sendEmail(user, event, subject, body)).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
}
use of com.redhat.cloud.notifications.models.InstantEmailTemplate in project notifications-backend by RedHatInsights.
the class TemplateRepository method findAllInstantEmailTemplates.
public List<InstantEmailTemplate> findAllInstantEmailTemplates(UUID applicationId) {
String hql = "FROM InstantEmailTemplate t LEFT JOIN FETCH t.eventType";
if (applicationId != null) {
hql += " WHERE t.eventType.application.id = :applicationId";
}
TypedQuery<InstantEmailTemplate> query = entityManager.createQuery(hql, InstantEmailTemplate.class);
if (applicationId != null) {
query.setParameter("applicationId", applicationId);
}
List<InstantEmailTemplate> instantEmailTemplates = query.getResultList();
for (InstantEmailTemplate instantEmailTemplate : instantEmailTemplates) {
if (instantEmailTemplate.getEventType() != null) {
// We need the event types in the REST response, but not their parent application.
instantEmailTemplate.getEventType().filterOutApplication();
}
// The full templates aren't needed in the REST response.
instantEmailTemplate.filterOutTemplates();
}
return instantEmailTemplates;
}
use of com.redhat.cloud.notifications.models.InstantEmailTemplate in project notifications-backend by RedHatInsights.
the class TemplateRepository method updateInstantEmailTemplate.
@Transactional
public boolean updateInstantEmailTemplate(UUID id, InstantEmailTemplate template) {
String hql = "UPDATE InstantEmailTemplate SET eventType = :eventType, subjectTemplate = :subjectTemplate, " + "bodyTemplate = :bodyTemplate WHERE id = :id";
EventType eventType;
if (template.getEventTypeId() == null) {
eventType = null;
} else {
eventType = findEventType(template.getEventTypeId());
}
Template subjectTemplate = findTemplate(template.getSubjectTemplateId(), SUBJECT_NOT_FOUND);
Template bodyTemplate = findTemplate(template.getBodyTemplateId(), BODY_NOT_FOUND);
int rowCount = entityManager.createQuery(hql).setParameter("eventType", eventType).setParameter("subjectTemplate", subjectTemplate).setParameter("bodyTemplate", bodyTemplate).setParameter("id", id).executeUpdate();
return rowCount > 0;
}
use of com.redhat.cloud.notifications.models.InstantEmailTemplate in project notifications-backend by RedHatInsights.
the class TemplateRepository method createInstantEmailTemplate.
@Transactional
public InstantEmailTemplate createInstantEmailTemplate(InstantEmailTemplate template) {
Template subjectTemplate = findTemplate(template.getSubjectTemplateId(), SUBJECT_NOT_FOUND);
Template bodyTemplate = findTemplate(template.getBodyTemplateId(), BODY_NOT_FOUND);
template.setSubjectTemplate(subjectTemplate);
template.setBodyTemplate(bodyTemplate);
if (template.getEventTypeId() != null) {
EventType eventType = findEventType(template.getEventTypeId());
template.setEventType(eventType);
}
entityManager.persist(template);
// The full event type isn't needed in the REST response.
template.filterOutEventType();
// The full templates aren't needed in the REST response.
template.filterOutTemplates();
return template;
}
use of com.redhat.cloud.notifications.models.InstantEmailTemplate in project notifications-backend by RedHatInsights.
the class TemplateRepository method findInstantEmailTemplateById.
public InstantEmailTemplate findInstantEmailTemplateById(UUID id) {
String hql = "FROM InstantEmailTemplate t JOIN FETCH t.subjectTemplate JOIN FETCH t.bodyTemplate " + "LEFT JOIN FETCH t.eventType WHERE t.id = :id";
try {
InstantEmailTemplate template = entityManager.createQuery(hql, InstantEmailTemplate.class).setParameter("id", id).getSingleResult();
// The full event type isn't needed in the REST response.
template.filterOutEventType();
return template;
} catch (NoResultException e) {
throw new NotFoundException("Instant email template not found");
}
}
Aggregations