diff --git a/backend/src/main/java/com/redhat/cloud/notifications/db/repositories/DrawerNotificationRepository.java b/backend/src/main/java/com/redhat/cloud/notifications/db/repositories/DrawerNotificationRepository.java index 7b792a5df6..464e5d3676 100644 --- a/backend/src/main/java/com/redhat/cloud/notifications/db/repositories/DrawerNotificationRepository.java +++ b/backend/src/main/java/com/redhat/cloud/notifications/db/repositories/DrawerNotificationRepository.java @@ -42,8 +42,8 @@ public List getNotifications(String orgId, String username, query.setDefaultSortBy("created:DESC"); Optional sort = query.getSort(); String hql = "SELECT dn.id, dn.read, " + - "dn.event.bundleDisplayName, dn.event.applicationDisplayName, dn.event.eventTypeDisplayName, dn.created, dn.event.renderedDrawerNotification " - + "FROM DrawerNotification dn where dn.orgId = :orgId and dn.userId = :userid"; + "dn.event.bundleDisplayName, dn.event.applicationDisplayName, dn.event.eventTypeDisplayName, dn.created, dn.event.renderedDrawerNotification, bundle.name " + + "FROM DrawerNotification dn join Bundle bundle on dn.event.bundleId = bundle.id where dn.orgId = :orgId and dn.userId = :userid"; hql = addHqlConditions(hql, bundleIds, appIds, eventTypeIds, startDate, endDate, readStatus); if (sort.isPresent()) { diff --git a/common/src/main/java/com/redhat/cloud/notifications/models/DrawerEntryPayload.java b/common/src/main/java/com/redhat/cloud/notifications/models/DrawerEntryPayload.java index ffb5112b15..37862cbcf9 100644 --- a/common/src/main/java/com/redhat/cloud/notifications/models/DrawerEntryPayload.java +++ b/common/src/main/java/com/redhat/cloud/notifications/models/DrawerEntryPayload.java @@ -29,6 +29,8 @@ public class DrawerEntryPayload { private String source; + private String bundle; + public DrawerEntryPayload() { } @@ -39,6 +41,7 @@ public DrawerEntryPayload(Object[] rawDrawerEntry) { title = (String) rawDrawerEntry[4]; created = (LocalDateTime) rawDrawerEntry[5]; description = (String) rawDrawerEntry[6]; + bundle = (String) rawDrawerEntry[7]; } public UUID getId() { @@ -88,4 +91,12 @@ public String getSource() { public void setSource(String source) { this.source = source; } + + public String getBundle() { + return bundle; + } + + public void setBundle(String bundle) { + this.bundle = bundle; + } } diff --git a/connector-drawer/src/main/java/com/redhat/cloud/notifications/connector/drawer/model/DrawerEntryPayload.java b/connector-drawer/src/main/java/com/redhat/cloud/notifications/connector/drawer/model/DrawerEntryPayload.java index ca363a3d55..6edf5e6865 100644 --- a/connector-drawer/src/main/java/com/redhat/cloud/notifications/connector/drawer/model/DrawerEntryPayload.java +++ b/connector-drawer/src/main/java/com/redhat/cloud/notifications/connector/drawer/model/DrawerEntryPayload.java @@ -26,6 +26,8 @@ public class DrawerEntryPayload { private String source; + private String bundle; + public DrawerEntryPayload() { } @@ -76,4 +78,12 @@ public String getSource() { public void setSource(String source) { this.source = source; } + + public String getBundle() { + return bundle; + } + + public void setBundle(String bundle) { + this.bundle = bundle; + } } diff --git a/connector-drawer/src/test/java/com/redhat/cloud/notifications/connector/drawer/DrawerConnectorRoutesTest.java b/connector-drawer/src/test/java/com/redhat/cloud/notifications/connector/drawer/DrawerConnectorRoutesTest.java index 42be90e2ec..f428b30cfe 100644 --- a/connector-drawer/src/test/java/com/redhat/cloud/notifications/connector/drawer/DrawerConnectorRoutesTest.java +++ b/connector-drawer/src/test/java/com/redhat/cloud/notifications/connector/drawer/DrawerConnectorRoutesTest.java @@ -98,6 +98,7 @@ private static DrawerNotificationToConnector buildTestDrawerNotificationToConnec drawerEntryPayload.setId(UUID.fromString("3ccfb747-610d-42e9-97de-05d43d07319d")); drawerEntryPayload.setSource("My app"); drawerEntryPayload.setTitle("the title"); + drawerEntryPayload.setBundle("My Bundle"); RecipientSettings recipientSettings = new RecipientSettings(); return new DrawerNotificationToConnector(orgId, drawerEntryPayload, Set.of(recipientSettings), List.of("user-1", "user-2")); @@ -245,6 +246,7 @@ protected static void assertKafkaSinkDrawerIsSatisfied(MockEndpoint kafkaSinkMoc assertNotNull(secondPayloadLevel.getString("id")); assertNotEquals(payload.getString("id"), secondPayloadLevel.getString("id")); assertEquals(false, secondPayloadLevel.getBoolean("read")); + assertEquals("My Bundle", secondPayloadLevel.getString("bundle")); assertEquals(notification.drawerEntryPayload().getDescription(), secondPayloadLevel.getString("description")); assertEquals(notification.drawerEntryPayload().getSource(), secondPayloadLevel.getString("source")); diff --git a/engine/src/main/java/com/redhat/cloud/notifications/db/repositories/BundleRepository.java b/engine/src/main/java/com/redhat/cloud/notifications/db/repositories/BundleRepository.java new file mode 100644 index 0000000000..c9d6c36f07 --- /dev/null +++ b/engine/src/main/java/com/redhat/cloud/notifications/db/repositories/BundleRepository.java @@ -0,0 +1,20 @@ +package com.redhat.cloud.notifications.db.repositories; + +import com.redhat.cloud.notifications.models.Bundle; +import io.quarkus.cache.CacheResult; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.persistence.EntityManager; +import java.util.UUID; + +@ApplicationScoped +public class BundleRepository { + + @Inject + EntityManager entityManager; + + @CacheResult(cacheName = "bundle-by-id") + public Bundle getBundle(UUID id) { + return entityManager.find(Bundle.class, id); + } +} diff --git a/engine/src/main/java/com/redhat/cloud/notifications/processors/drawer/DrawerProcessor.java b/engine/src/main/java/com/redhat/cloud/notifications/processors/drawer/DrawerProcessor.java index 296c427057..a0a84505ec 100644 --- a/engine/src/main/java/com/redhat/cloud/notifications/processors/drawer/DrawerProcessor.java +++ b/engine/src/main/java/com/redhat/cloud/notifications/processors/drawer/DrawerProcessor.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.redhat.cloud.notifications.DelayedThrower; import com.redhat.cloud.notifications.config.FeatureFlipper; +import com.redhat.cloud.notifications.db.repositories.BundleRepository; import com.redhat.cloud.notifications.db.repositories.DrawerNotificationRepository; import com.redhat.cloud.notifications.db.repositories.EndpointRepository; import com.redhat.cloud.notifications.db.repositories.EventRepository; @@ -95,6 +96,9 @@ public class DrawerProcessor extends SystemEndpointTypeProcessor { @Inject NotificationHistoryRepository notificationHistoryRepository; + @Inject + BundleRepository bundleRepository; + @PostConstruct void postConstruct() { Log.info("DrawerProcessor instance created"); @@ -184,6 +188,7 @@ private DrawerEntryPayload buildJsonPayloadFromEvent(Event event) { drawerEntryPayload.setTitle(event.getEventTypeDisplayName()); drawerEntryPayload.setCreated(event.getCreated()); drawerEntryPayload.setSource(String.format("%s - %s", event.getApplicationDisplayName(), event.getBundleDisplayName())); + drawerEntryPayload.setBundle(bundleRepository.getBundle(event.getBundleId()).getName()); return drawerEntryPayload; } diff --git a/engine/src/main/resources/application.properties b/engine/src/main/resources/application.properties index 2fea18dbef..61a9cb65f2 100644 --- a/engine/src/main/resources/application.properties +++ b/engine/src/main/resources/application.properties @@ -199,3 +199,4 @@ quarkus.cache.caffeine.is-email-aggregation-supported.expire-after-write=PT5M quarkus.cache.caffeine.rbac-recipient-users-provider-get-users.expire-after-write=PT10M quarkus.cache.caffeine.rbac-recipient-users-provider-get-group-users.expire-after-write=PT10M quarkus.cache.caffeine.recipients-resolver-results.expire-after-write=PT1M +quarkus.cache.caffeine.bundle.by.id.expire-after-write=PT15M