suppression:
required: true
clients:
- onepaywalmart
pre-activation-indicators:
- "1"
- "2"
post-activation-indicators:
- "3"
- "4"
notification-types:
- cloudEvent
- emailSms
- clientNotification
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@ConfigurationProperties(prefix = "suppression")
public class SuppressionConfig {
private boolean required;
private List<String> clients;
private List<String> preActivationIndicators;
private List<String> postActivationIndicators;
private List<String> notificationTypes;
public boolean isRequired() {
return required;
}
public void setRequired(boolean required) {
this.required = required;
}
public List<String> getClients() {
return clients;
}
public void setClients(List<String> clients) {
this.clients = clients;
}
public List<String> getPreActivationIndicators() {
return preActivationIndicators;
}
public void setPreActivationIndicators(List<String> preActivationIndicators) {
this.preActivationIndicators = preActivationIndicators;
}
public List<String> getPostActivationIndicators() {
return postActivationIndicators;
}
public void setPostActivationIndicators(List<String> postActivationIndicators) {
this.postActivationIndicators = postActivationIndicators;
}
public List<String> getNotificationTypes() {
return notificationTypes;
}
public void setNotificationTypes(List<String> notificationTypes) {
this.notificationTypes = notificationTypes;
}
}
package com.syf.ecom.util;
import java.util.List;
public class SuppressionUtils {
private final SuppressionConfig suppressionConfig;
public SuppressionUtils(SuppressionConfig suppressionConfig) {
this.suppressionConfig = suppressionConfig;
}
/** Notification channel types for suppression logic. */
public enum ChannelType {
CLOUD_EVENT,
EMAIL_SMS
}
/** Result object indicating which notifications should be sent. */
public static class SuppressionResult {
public final boolean sendCloudEvent;
public final boolean sendEmailSms;
public final boolean sendClientNotification;
public SuppressionResult(boolean sendCloudEvent, boolean sendEmailSms, boolean sendClientNotification) {
this.sendCloudEvent = sendCloudEvent;
this.sendEmailSms = sendEmailSms;
this.sendClientNotification = sendClientNotification;
}
}
public SuppressionResult shouldSendNotification(
String client,
String flipStatusIndicator,
String cardShippedDate) {
// If suppression not required or client not configured → send all
if (!suppressionConfig.isRequired()
|| !suppressionConfig.getClients().contains(client)) {
return new SuppressionResult(true, true, true);
}
List<String> preActivation = suppressionConfig.getPreActivationIndicators();
List<String> postActivation = suppressionConfig.getPostActivationIndicators();
// Pre-activation logic
if (preActivation.contains(flipStatusIndicator)
&& cardShippedDate != null
&& !cardShippedDate.isEmpty()) {
// Send only Cloud + Client Notification
return new SuppressionResult(true, false, true);
}
// Post-activation logic
if (postActivation.contains(flipStatusIndicator)) {
return new SuppressionResult(true, true, true);
}
// Default
return new SuppressionResult(true, true, true);
}
}