diff --git a/examples/de/nclazz/registry/v0/events/ServiceEvent.java b/examples/de/nclazz/registry/v0/events/ServiceEvent.java
new file mode 100644
index 0000000..5a00319
--- /dev/null
+++ b/examples/de/nclazz/registry/v0/events/ServiceEvent.java
@@ -0,0 +1,20 @@
+/**
+ * Auto-generated from apibuilder.io service specification.
+ * apidoc-version : 0.15.4
+ * organisation : nclazz
+ * service-version : 0.0.3-1-g6fccc33
+ *
+ * Documentation at:
+ * https://app.apibuilder.io/nclazz/registry_events/0.0.3-1-g6fccc33
+ *
+**/
+package de.nclazz.registry.v0.events;
+
+/**
+ *
+ * See https://app.apibuilder.io/nclazz/registry_events/0.0.3-1-g6fccc33#model-
+ *
+**/
+public interface ServiceEvent {
+
+}
\ No newline at end of file
diff --git a/examples/de/nclazz/registry/v0/events/ServiceHealthchanged.java b/examples/de/nclazz/registry/v0/events/ServiceHealthchanged.java
new file mode 100644
index 0000000..3fb2480
--- /dev/null
+++ b/examples/de/nclazz/registry/v0/events/ServiceHealthchanged.java
@@ -0,0 +1,34 @@
+/**
+ * Auto-generated from apibuilder.io service specification.
+ * apidoc-version : 0.15.4
+ * organisation : nclazz
+ * service-version : 0.0.3-1-g6fccc33
+ *
+ * Documentation at:
+ * https://app.apibuilder.io/nclazz/registry_events/0.0.3-1-g6fccc33
+ *
+**/
+package de.nclazz.registry.v0.events;
+
+import java.time.LocalDateTime;
+import de.nclazz.registry.v0.models.Service;
+
+import org.axonframework.modelling.command.TargetAggregateIdentifier;
+import lombok.*;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ServiceHealthchanged implements ServiceEvent {
+
+ @TargetAggregateIdentifier
+ private String serviceId;
+
+ @NonNull
+ private String eventId;
+ @NonNull
+ private LocalDateTime timestamp;
+ @NonNull
+ private Service service;
+
+}
\ No newline at end of file
diff --git a/examples/de/nclazz/registry/v0/events/ServiceRegistered.java b/examples/de/nclazz/registry/v0/events/ServiceRegistered.java
new file mode 100644
index 0000000..1d52040
--- /dev/null
+++ b/examples/de/nclazz/registry/v0/events/ServiceRegistered.java
@@ -0,0 +1,34 @@
+/**
+ * Auto-generated from apibuilder.io service specification.
+ * apidoc-version : 0.15.4
+ * organisation : nclazz
+ * service-version : 0.0.3-1-g6fccc33
+ *
+ * Documentation at:
+ * https://app.apibuilder.io/nclazz/registry_events/0.0.3-1-g6fccc33
+ *
+**/
+package de.nclazz.registry.v0.events;
+
+import java.time.LocalDateTime;
+import de.nclazz.registry.v0.models.Service;
+
+import org.axonframework.modelling.command.TargetAggregateIdentifier;
+import lombok.*;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ServiceRegistered implements ServiceEvent {
+
+ @TargetAggregateIdentifier
+ private String serviceId;
+
+ @NonNull
+ private String eventId;
+ @NonNull
+ private LocalDateTime timestamp;
+ @NonNull
+ private Service service;
+
+}
\ No newline at end of file
diff --git a/examples/de/nclazz/registry/v0/events/ServiceUnregistered.java b/examples/de/nclazz/registry/v0/events/ServiceUnregistered.java
new file mode 100644
index 0000000..f60eca0
--- /dev/null
+++ b/examples/de/nclazz/registry/v0/events/ServiceUnregistered.java
@@ -0,0 +1,34 @@
+/**
+ * Auto-generated from apibuilder.io service specification.
+ * apidoc-version : 0.15.4
+ * organisation : nclazz
+ * service-version : 0.0.3-1-g6fccc33
+ *
+ * Documentation at:
+ * https://app.apibuilder.io/nclazz/registry_events/0.0.3-1-g6fccc33
+ *
+**/
+package de.nclazz.registry.v0.events;
+
+import java.time.LocalDateTime;
+import de.nclazz.registry.v0.models.Service;
+
+import org.axonframework.modelling.command.TargetAggregateIdentifier;
+import lombok.*;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ServiceUnregistered implements ServiceEvent {
+
+ @TargetAggregateIdentifier
+ private String serviceId;
+
+ @NonNull
+ private String eventId;
+ @NonNull
+ private LocalDateTime timestamp;
+ @NonNull
+ private Service service;
+
+}
\ No newline at end of file
diff --git a/examples/example_events.json b/examples/example_events.json
new file mode 100644
index 0000000..356b202
--- /dev/null
+++ b/examples/example_events.json
@@ -0,0 +1,226 @@
+{
+ "apidoc": {
+ "version": "0.15.4"
+ },
+ "name": "registry_events",
+ "organization": {
+ "key": "nclazz"
+ },
+ "application": {
+ "key": "registry_events"
+ },
+ "namespace": "de.nclazz.registry.v0",
+ "version": "0.0.3-1-g6fccc33",
+ "info": {
+ "contact": {
+ "name": "Niclas Thobaben",
+ "url": "https://nclazz.de",
+ "email": "info@nclazz.de"
+ }
+ },
+ "headers": [],
+ "imports": [
+ {
+ "uri": "https://app.apibuilder.io/nclazz/common/latest/service.json",
+ "namespace": "de.nclazz.common.v0",
+ "organization": {
+ "key": "nclazz"
+ },
+ "application": {
+ "key": "common"
+ },
+ "version": "0.0.3",
+ "enums": [],
+ "interfaces": [],
+ "unions": [],
+ "models": [
+ "healthcheck"
+ ],
+ "annotations": [
+ {
+ "name": "personal_data",
+ "description": "Identifies a field that contains Personal Data, as defined by GDPR."
+ }
+ ]
+ },
+ {
+ "uri": "https://app.apibuilder.io/nclazz/registry/latest/service.json",
+ "namespace": "de.nclazz.registry.v0",
+ "organization": {
+ "key": "nclazz"
+ },
+ "application": {
+ "key": "registry"
+ },
+ "version": "0.0.2",
+ "enums": [
+ "serviceHealth"
+ ],
+ "interfaces": [],
+ "unions": [],
+ "models": [
+ "service",
+ "service_form"
+ ],
+ "annotations": [
+ {
+ "name": "personal_data",
+ "description": "Identifies a field that contains Personal Data, as defined by GDPR."
+ }
+ ]
+ }
+ ],
+ "enums": [],
+ "interfaces": [],
+ "unions": [
+ {
+ "name": "service_event",
+ "plural": "service_events",
+ "types": [
+ {
+ "type": "service_registered",
+ "attributes": [],
+ "discriminator_value": "service_registered"
+ },
+ {
+ "type": "service_unregistered",
+ "attributes": [],
+ "discriminator_value": "service_unregistered"
+ },
+ {
+ "type": "service_healthchanged",
+ "attributes": [],
+ "discriminator_value": "service_healthchanged"
+ }
+ ],
+ "attributes": [],
+ "interfaces": [],
+ "discriminator": "type"
+ }
+ ],
+ "models": [
+ {
+ "name": "service_healthchanged",
+ "plural": "service_healthchangeds",
+ "fields": [
+ {
+ "name": "event_id",
+ "type": "string",
+ "required": true,
+ "attributes": [],
+ "annotations": []
+ },
+ {
+ "name": "timestamp",
+ "type": "date-time-iso8601",
+ "required": true,
+ "attributes": [],
+ "annotations": []
+ },
+ {
+ "name": "service",
+ "type": "de.nclazz.registry.v0.models.service",
+ "required": true,
+ "attributes": [],
+ "annotations": []
+ }
+ ],
+ "attributes": [
+ {
+ "name": "aggregateId",
+ "value": {
+ "name": "serviceId",
+ "type": "string"
+ }
+ }
+ ],
+ "interfaces": [],
+ "description": "A has changed its health status."
+ },
+ {
+ "name": "service_registered",
+ "plural": "service_registereds",
+ "fields": [
+ {
+ "name": "event_id",
+ "type": "string",
+ "required": true,
+ "attributes": [],
+ "annotations": []
+ },
+ {
+ "name": "timestamp",
+ "type": "date-time-iso8601",
+ "required": true,
+ "attributes": [],
+ "annotations": []
+ },
+ {
+ "name": "service",
+ "type": "de.nclazz.registry.v0.models.service",
+ "required": true,
+ "attributes": [],
+ "annotations": []
+ }
+ ],
+ "attributes": [
+ {
+ "name": "aggregateId",
+ "value": {
+ "name": "serviceId",
+ "type": "string"
+ }
+ }
+ ],
+ "interfaces": [],
+ "description": "A new service has been registered."
+ },
+ {
+ "name": "service_unregistered",
+ "plural": "service_unregistereds",
+ "fields": [
+ {
+ "name": "event_id",
+ "type": "string",
+ "required": true,
+ "attributes": [],
+ "annotations": []
+ },
+ {
+ "name": "timestamp",
+ "type": "date-time-iso8601",
+ "required": true,
+ "attributes": [],
+ "annotations": []
+ },
+ {
+ "name": "service",
+ "type": "de.nclazz.registry.v0.models.service",
+ "required": true,
+ "attributes": [],
+ "annotations": []
+ }
+ ],
+ "attributes": [
+ {
+ "name": "aggregateId",
+ "value": {
+ "name": "serviceId",
+ "type": "string"
+ }
+ }
+ ],
+ "interfaces": [],
+ "description": "A service has been unregistered."
+ }
+ ],
+ "resources": [],
+ "attributes": [],
+ "annotations": [
+ {
+ "name": "personal_data",
+ "description": "Identifies a field that contains Personal Data, as defined by GDPR."
+ }
+ ],
+ "description": "Registry Event Schema for Kafka Streams."
+ }
\ No newline at end of file
diff --git a/src/generators/java-axon-events-generator.js b/src/generators/java-axon-events-generator.js
index 3d56566..1f0fcab 100644
--- a/src/generators/java-axon-events-generator.js
+++ b/src/generators/java-axon-events-generator.js
@@ -10,7 +10,7 @@ const templateUnion = fs.readFileSync(path.resolve(path.join('templates', 'union
module.exports = (service) => {
- const unions = javaUnions.mapUnions(service.unions, service.models, service.namespace)
+ const unions = javaUnions.mapUnions(service.unions, service.models, service.namespace, 'events')
let models = service.models.map(model => {
let aggregateAttribute = (model.attributes.find(attr => attr.name === 'aggregateId') || { value: {} }).value
let aggregateId = {}
diff --git a/src/java-model.js b/src/java-model.js
index da1ee42..aae44d2 100644
--- a/src/java-model.js
+++ b/src/java-model.js
@@ -19,7 +19,8 @@ module.exports = {
imports = [ ...imports, ...field.type.imports ]
}
model.imports = [ ...new Set(imports) ]
-
+ model.implements = model.implements || []
+ model['implements'][ model['implements'].length - 1 ].last = true;
return model
diff --git a/src/java-unions.js b/src/java-unions.js
index b6a0da0..e6dba45 100644
--- a/src/java-unions.js
+++ b/src/java-unions.js
@@ -12,9 +12,9 @@ module.exports = {
union.types.forEach(type => {
models.forEach(model => {
- if(type.name === model.name) {
+ if(type.type === model.name) {
model.implements = model.implements || []
- model.implements.push(union.name)
+ model.implements.push({ name: union.name })
}
})
})
diff --git a/templates/axon-event.java.mustache b/templates/axon-event.java.mustache
index 7076249..6ace46e 100644
--- a/templates/axon-event.java.mustache
+++ b/templates/axon-event.java.mustache
@@ -20,7 +20,7 @@ import lombok.*;
@Data
@NoArgsConstructor
@AllArgsConstructor
-public class {{name}} {{#implements.length}}implements {{#implements}}.{{/implements}}{{/implements.length}} {
+public class {{name}} {{#implements.length}}implements {{#implements}}{{name}}{{^last}}, {{/last}}{{/implements}}{{/implements.length}} {
@TargetAggregateIdentifier
private {{{aggregateId.type.name}}} {{aggregateId.name}};
diff --git a/templates/lombok-model.java.mustache b/templates/lombok-model.java.mustache
index 0cc7497..1fb8dc9 100644
--- a/templates/lombok-model.java.mustache
+++ b/templates/lombok-model.java.mustache
@@ -27,7 +27,7 @@ import {{{.}}};
**/
@Data
@NoArgsConstructor
-public class {{name}} {{#implements.length}}implements {{#implements}}.{{/implements}}{{/implements.length}}{
+public class {{name}} {{#implements.length}}implements {{#implements}}{{name}}{{^last}}, {{/last}}{{/implements}}{{/implements.length}}{
{{#fields}}
{{#description}}/** {{.}} **/{{/description}}