use of com.redhat.cloud.notifications.routers.models.SettingsValues.ApplicationSettingsValue in project notifications-backend by RedHatInsights.
the class UserConfigResource method saveSettings.
@POST
@Path("/notification-preference")
@Consumes(APPLICATION_JSON)
@Produces(TEXT_PLAIN)
@Operation(hidden = true)
@Transactional
public Response saveSettings(@Context SecurityContext sec, @Valid SettingsValues values) {
final RhIdPrincipal principal = (RhIdPrincipal) sec.getUserPrincipal();
final String account = principal.getAccount();
final String name = principal.getName();
final List<Boolean> subscriptionRequests = new ArrayList<>();
values.bundles.forEach((bundleName, bundleSettingsValue) -> bundleSettingsValue.applications.forEach((applicationName, applicationSettingsValue) -> {
Application app = applicationRepository.getApplication(bundleName, applicationName);
applicationSettingsValue.notifications.forEach((emailSubscriptionType, subscribed) -> {
if (subscribed) {
if (app != null) {
subscriptionRequests.add(emailSubscriptionRepository.subscribe(account, name, bundleName, applicationName, emailSubscriptionType));
}
} else {
subscriptionRequests.add(emailSubscriptionRepository.unsubscribe(account, name, bundleName, applicationName, emailSubscriptionType));
}
});
}));
boolean allisSuccess = subscriptionRequests.stream().allMatch(Boolean.TRUE::equals);
Response.ResponseBuilder builder;
if (allisSuccess) {
builder = Response.ok();
} else {
// Prevent from saving
builder = Response.serverError().entity("Storing of settings Failed.");
builder.type("text/plain");
}
return builder.build();
}
use of com.redhat.cloud.notifications.routers.models.SettingsValues.ApplicationSettingsValue in project notifications-backend by RedHatInsights.
the class UserConfigResource method getSettingsValueForUser.
/**
* Pulls the user settings values of an user across all the know applications of a bundle
*/
private SettingsValues getSettingsValueForUser(String account, String username, String bundleName) {
if (bundleName == null || bundleName.equals("")) {
throw new BadRequestException("bundleName must have a value");
}
SettingsValues settingsValues = new SettingsValues();
Bundle bundle = bundleRepository.getBundle(bundleName);
if (bundle == null) {
throw new BadRequestException("Unknown bundleName: " + bundleName);
} else {
BundleSettingsValue bundleSettingsValue = new BundleSettingsValue();
bundleSettingsValue.displayName = bundle.getDisplayName();
settingsValues.bundles.put(bundle.getName(), bundleSettingsValue);
for (Application application : applicationRepository.getApplications(bundle.getName())) {
ApplicationSettingsValue applicationSettingsValue = new ApplicationSettingsValue();
applicationSettingsValue.displayName = application.getDisplayName();
settingsValues.bundles.get(bundle.getName()).applications.put(application.getName(), applicationSettingsValue);
for (EmailSubscriptionType emailSubscriptionType : EmailSubscriptionType.values()) {
// TODO NOTIF-450 How do we deal with a failure here? What kind of response should be sent to the UI when the engine is down?
boolean supported = templateEngineClient.isSubscriptionTypeSupported(bundle.getName(), application.getName(), emailSubscriptionType);
if (supported) {
settingsValues.bundles.get(bundle.getName()).applications.get(application.getName()).notifications.put(emailSubscriptionType, false);
}
}
}
List<EmailSubscription> emailSubscriptions = emailSubscriptionRepository.getEmailSubscriptionsForUser(account, username);
for (EmailSubscription emailSubscription : emailSubscriptions) {
if (settingsValues.bundles.containsKey(emailSubscription.getApplication().getBundle().getName())) {
BundleSettingsValue bundleSettings = settingsValues.bundles.get(emailSubscription.getApplication().getBundle().getName());
if (bundleSettings.applications.containsKey(emailSubscription.getApplication().getName())) {
ApplicationSettingsValue applicationSettingsValue = bundleSettings.applications.get(emailSubscription.getApplication().getName());
if (applicationSettingsValue.notifications.containsKey(emailSubscription.getType())) {
bundleSettings.applications.get(emailSubscription.getApplication().getName()).notifications.put(emailSubscription.getType(), true);
}
}
}
}
return settingsValues;
}
}
use of com.redhat.cloud.notifications.routers.models.SettingsValues.ApplicationSettingsValue in project notifications-backend by RedHatInsights.
the class UserConfigResourceTest method createSettingsValue.
private SettingsValues createSettingsValue(String bundle, String application, Boolean daily, Boolean instant) {
ApplicationSettingsValue applicationSettingsValue = new ApplicationSettingsValue();
applicationSettingsValue.notifications.put(DAILY, daily);
applicationSettingsValue.notifications.put(INSTANT, instant);
BundleSettingsValue bundleSettingsValue = new BundleSettingsValue();
bundleSettingsValue.applications.put(application, applicationSettingsValue);
SettingsValues settingsValues = new SettingsValues();
settingsValues.bundles.put(bundle, bundleSettingsValue);
return settingsValues;
}
Aggregations