From d2e88d075c5d2f28083df756e3f35110974e0ce3 Mon Sep 17 00:00:00 2001 From: Niclas Thobaben Date: Sun, 18 Jul 2021 15:02:22 +0200 Subject: [PATCH] added aggregateid attribute --- .../registry/v0/events/ServiceEvent.java | 20 ++ .../v0/events/ServiceHealthchanged.java | 34 +++ .../registry/v0/events/ServiceRegistered.java | 34 +++ .../v0/events/ServiceUnregistered.java | 34 +++ examples/example_events.json | 226 ++++++++++++++++++ src/generators/java-axon-events-generator.js | 2 +- src/java-model.js | 3 +- src/java-unions.js | 4 +- templates/axon-event.java.mustache | 2 +- templates/lombok-model.java.mustache | 2 +- 10 files changed, 355 insertions(+), 6 deletions(-) create mode 100644 examples/de/nclazz/registry/v0/events/ServiceEvent.java create mode 100644 examples/de/nclazz/registry/v0/events/ServiceHealthchanged.java create mode 100644 examples/de/nclazz/registry/v0/events/ServiceRegistered.java create mode 100644 examples/de/nclazz/registry/v0/events/ServiceUnregistered.java create mode 100644 examples/example_events.json 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}}