From 800c9430f75b02d93c8440777968f3a84c606cc8 Mon Sep 17 00:00:00 2001 From: Pascal Holy <54705263+pascal-airy@users.noreply.github.com> Date: Thu, 11 Feb 2021 11:03:43 +0100 Subject: [PATCH 01/28] [#946] Release/0.8.1 (#947) * Fixes #946 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index a3df0a6959..56f495f20f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.0 +0.8.1-alpha From 00d2afc6c778d892815e26c5b82d1af5938c18fc Mon Sep 17 00:00:00 2001 From: Paulo Diniz Date: Thu, 11 Feb 2021 16:05:16 +0100 Subject: [PATCH 02/28] [#675] Add Templates Endpoints (#948) --- backend/api/admin/BUILD | 1 + .../java/co/airy/core/api/admin/Stores.java | 33 ++++- .../core/api/admin/TemplatesController.java | 109 ++++++++++++++++ .../payload/CreateTemplateRequestPayload.java | 22 ++++ .../payload/DeleteTemplateRequestPayload.java | 16 +++ .../payload/GetTemplateRequestPayload.java | 16 +++ .../payload/ListTemplatesRequestPayload.java | 12 ++ .../payload/TemplatesResponsePayload.java | 15 +++ .../payload/UpdateTemplateRequestPayload.java | 23 ++++ .../api/admin/ChannelsControllerTest.java | 5 +- .../core/api/admin/TagsControllerTest.java | 5 +- .../api/admin/TemplatesControllerTest.java | 117 ++++++++++++++++++ .../api/admin/WebhooksControllerTest.java | 5 +- .../config/ClientConfigControllerTest.java | 5 +- backend/avro/communication/BUILD | 5 + backend/avro/communication/template.avsc | 11 ++ .../co/airy/model/channel/ChannelPayload.java | 1 - backend/model/template/BUILD | 17 +++ .../airy/model/template/TemplatePayload.java | 37 ++++++ .../scripts/provision/create-topics.sh | 2 + .../ApplicationCommunicationTemplates.java | 17 +++ 21 files changed, 468 insertions(+), 6 deletions(-) create mode 100644 backend/api/admin/src/main/java/co/airy/core/api/admin/TemplatesController.java create mode 100644 backend/api/admin/src/main/java/co/airy/core/api/admin/payload/CreateTemplateRequestPayload.java create mode 100644 backend/api/admin/src/main/java/co/airy/core/api/admin/payload/DeleteTemplateRequestPayload.java create mode 100644 backend/api/admin/src/main/java/co/airy/core/api/admin/payload/GetTemplateRequestPayload.java create mode 100644 backend/api/admin/src/main/java/co/airy/core/api/admin/payload/ListTemplatesRequestPayload.java create mode 100644 backend/api/admin/src/main/java/co/airy/core/api/admin/payload/TemplatesResponsePayload.java create mode 100644 backend/api/admin/src/main/java/co/airy/core/api/admin/payload/UpdateTemplateRequestPayload.java create mode 100644 backend/api/admin/src/test/java/co/airy/core/api/admin/TemplatesControllerTest.java create mode 100644 backend/avro/communication/template.avsc create mode 100644 backend/model/template/BUILD create mode 100644 backend/model/template/src/main/java/co/airy/model/template/TemplatePayload.java create mode 100644 lib/java/kafka/schema/src/main/java/co/airy/kafka/schema/application/ApplicationCommunicationTemplates.java diff --git a/backend/api/admin/BUILD b/backend/api/admin/BUILD index 7c0ad31647..def2b60c67 100644 --- a/backend/api/admin/BUILD +++ b/backend/api/admin/BUILD @@ -9,6 +9,7 @@ app_deps = [ "//backend:tag", "//backend:webhook", "//backend/model/metadata", + "//backend/model/template", "//lib/java/uuid", "//lib/java/spring/auth:spring-auth", "//lib/java/spring/web:spring-web", diff --git a/backend/api/admin/src/main/java/co/airy/core/api/admin/Stores.java b/backend/api/admin/src/main/java/co/airy/core/api/admin/Stores.java index a7f79ce65e..0f712873ce 100644 --- a/backend/api/admin/src/main/java/co/airy/core/api/admin/Stores.java +++ b/backend/api/admin/src/main/java/co/airy/core/api/admin/Stores.java @@ -4,10 +4,12 @@ import co.airy.avro.communication.ChannelConnectionState; import co.airy.avro.communication.Metadata; import co.airy.avro.communication.Tag; +import co.airy.avro.communication.Template; import co.airy.avro.communication.Webhook; import co.airy.kafka.schema.application.ApplicationCommunicationChannels; import co.airy.kafka.schema.application.ApplicationCommunicationMetadata; import co.airy.kafka.schema.application.ApplicationCommunicationTags; +import co.airy.kafka.schema.application.ApplicationCommunicationTemplates; import co.airy.kafka.schema.application.ApplicationCommunicationWebhooks; import co.airy.kafka.streams.KafkaStreamsWrapper; import co.airy.model.channel.dto.ChannelContainer; @@ -46,6 +48,7 @@ public class Stores implements HealthIndicator, ApplicationListener producer) { this.streams = streams; @@ -81,6 +85,8 @@ public void onApplicationEvent(ApplicationStartedEvent event) { builder.table(applicationCommunicationTags, Materialized.as(tagsStore)); + builder.table(applicationCommunicationTemplates, Materialized.as(templatesStore)); + streams.start(builder.build(), appId); } @@ -120,15 +126,32 @@ public void deleteTag(Tag tag) { producer.send(new ProducerRecord<>(applicationCommunicationTags, tag.getId(), null)); } + public void storeTemplate(Template template) throws ExecutionException, InterruptedException { + producer.send(new ProducerRecord<>(applicationCommunicationTemplates, template.getId(), template)).get(); + } + + public void deleteTemplate(Template template) { + producer.send(new ProducerRecord<>(applicationCommunicationTemplates, template.getId(), null)); + } + public ReadOnlyKeyValueStore getConnectedChannelsStore() { return streams.acquireLocalStore(connectedChannelsStore); } + public ReadOnlyKeyValueStore getTemplatesStore() { + return streams.acquireLocalStore(templatesStore); + } + public ChannelContainer getChannel(String channelId) { final ReadOnlyKeyValueStore store = getConnectedChannelsStore(); return store.get(channelId); } + public Template getTemplate(String templateId) { + final ReadOnlyKeyValueStore store = getTemplatesStore(); + return store.get(templateId); + } + public List getChannels() { final ReadOnlyKeyValueStore store = getConnectedChannelsStore(); @@ -140,9 +163,17 @@ public List getChannels() { return channels; } + public List