Skip to content

Commit 5d756a9

Browse files
authored
Add artifact created event based on the outbox pattern (#5274)
* Add artifact created event based on the outbox pattern * Fire artifact create event inside the db transaction * Add artifact metadata update event and artifact delete event * Initial implementation for kafkasql events * Improve test assertions * Add group events * Only create the event in the table if the database supports events * Implement artifact version events * Add rules events * Update events test with rules tests for modifications and deletions * Add documentation to properties * Remove property that enables events * Ensure that any event is sent only once
1 parent 26d9fa1 commit 5d756a9

File tree

54 files changed

+1920
-170
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1920
-170
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.apicurio.registry.events;
2+
3+
import io.apicurio.registry.storage.dto.ArtifactMetaDataDto;
4+
import io.apicurio.registry.storage.dto.OutboxEvent;
5+
import org.json.JSONObject;
6+
7+
import java.util.UUID;
8+
9+
import static io.apicurio.registry.storage.StorageEventType.ARTIFACT_CREATED;
10+
11+
public class ArtifactCreated extends OutboxEvent {
12+
private final JSONObject eventPayload;
13+
14+
private ArtifactCreated(String id, String aggregateId, JSONObject eventPayload) {
15+
super(id, aggregateId);
16+
this.eventPayload = eventPayload;
17+
}
18+
19+
public static ArtifactCreated of(ArtifactMetaDataDto artifactMetaDataDto) {
20+
String id = UUID.randomUUID().toString();
21+
JSONObject jsonObject = new JSONObject();
22+
jsonObject.put("id", id).put("groupId", artifactMetaDataDto.getGroupId())
23+
.put("artifactId", artifactMetaDataDto.getArtifactId())
24+
.put("name", artifactMetaDataDto.getName())
25+
.put("description", artifactMetaDataDto.getDescription())
26+
.put("eventType", ARTIFACT_CREATED.name());
27+
28+
return new ArtifactCreated(id,
29+
artifactMetaDataDto.getGroupId() + "-" + artifactMetaDataDto.getArtifactId(), jsonObject);
30+
}
31+
32+
@Override
33+
public String getType() {
34+
return ARTIFACT_CREATED.name();
35+
}
36+
37+
@Override
38+
public JSONObject getPayload() {
39+
return eventPayload;
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.apicurio.registry.events;
2+
3+
import io.apicurio.registry.storage.dto.OutboxEvent;
4+
import org.json.JSONObject;
5+
6+
import java.util.UUID;
7+
8+
import static io.apicurio.registry.storage.StorageEventType.ARTIFACT_DELETED;
9+
10+
public class ArtifactDeleted extends OutboxEvent {
11+
12+
private final JSONObject eventPayload;
13+
14+
private ArtifactDeleted(String id, String aggregateId, JSONObject eventPayload) {
15+
super(id, aggregateId);
16+
this.eventPayload = eventPayload;
17+
}
18+
19+
public static ArtifactDeleted of(String groupId, String artifactId) {
20+
String id = UUID.randomUUID().toString();
21+
JSONObject jsonObject = new JSONObject();
22+
jsonObject.put("id", id).put("groupId", groupId).put("artifactId", artifactId).put("eventType",
23+
ARTIFACT_DELETED.name());
24+
25+
return new ArtifactDeleted(id, groupId + "-" + artifactId, jsonObject);
26+
}
27+
28+
@Override
29+
public String getType() {
30+
return ARTIFACT_DELETED.name();
31+
}
32+
33+
@Override
34+
public JSONObject getPayload() {
35+
return eventPayload;
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.apicurio.registry.events;
2+
3+
import io.apicurio.registry.storage.dto.EditableArtifactMetaDataDto;
4+
import io.apicurio.registry.storage.dto.OutboxEvent;
5+
import org.json.JSONObject;
6+
7+
import java.util.UUID;
8+
9+
import static io.apicurio.registry.storage.StorageEventType.ARTIFACT_METADATA_UPDATED;
10+
11+
public class ArtifactMetadataUpdated extends OutboxEvent {
12+
13+
private final JSONObject eventPayload;
14+
15+
private ArtifactMetadataUpdated(String id, String aggregateId, JSONObject eventPayload) {
16+
super(id, aggregateId);
17+
this.eventPayload = eventPayload;
18+
}
19+
20+
public static ArtifactMetadataUpdated of(String groupId, String artifactId,
21+
EditableArtifactMetaDataDto artifactMetaDataDto) {
22+
String id = UUID.randomUUID().toString();
23+
JSONObject jsonObject = new JSONObject();
24+
jsonObject.put("id", id).put("groupId", groupId).put("artifactId", artifactId)
25+
.put("name", artifactMetaDataDto.getName()).put("owner", artifactMetaDataDto.getOwner())
26+
.put("description", artifactMetaDataDto.getDescription())
27+
.put("eventType", ARTIFACT_METADATA_UPDATED.name());
28+
29+
return new ArtifactMetadataUpdated(id, groupId + "-" + artifactId, jsonObject);
30+
}
31+
32+
@Override
33+
public String getType() {
34+
return ARTIFACT_METADATA_UPDATED.name();
35+
}
36+
37+
@Override
38+
public JSONObject getPayload() {
39+
return eventPayload;
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package io.apicurio.registry.events;
2+
3+
import io.apicurio.registry.storage.dto.OutboxEvent;
4+
import io.apicurio.registry.storage.dto.RuleConfigurationDto;
5+
import io.apicurio.registry.types.RuleType;
6+
import org.json.JSONObject;
7+
8+
import java.util.UUID;
9+
10+
import static io.apicurio.registry.storage.StorageEventType.ARTIFACT_RULE_CONFIGURED;
11+
12+
public class ArtifactRuleConfigured extends OutboxEvent {
13+
private final JSONObject eventPayload;
14+
15+
private ArtifactRuleConfigured(String id, String aggregateId, JSONObject eventPayload) {
16+
super(id, aggregateId);
17+
this.eventPayload = eventPayload;
18+
}
19+
20+
public static ArtifactRuleConfigured of(String groupId, String artifactId, RuleType ruleType,
21+
RuleConfigurationDto rule) {
22+
String id = UUID.randomUUID().toString();
23+
JSONObject jsonObject = new JSONObject();
24+
jsonObject.put("id", id).put("groupId", groupId).put("artifactId", artifactId)
25+
.put("ruleType", ruleType.value()).put("rule", rule.getConfiguration())
26+
.put("eventType", ARTIFACT_RULE_CONFIGURED.name());
27+
28+
return new ArtifactRuleConfigured(id, groupId + "-" + artifactId, jsonObject);
29+
}
30+
31+
@Override
32+
public String getType() {
33+
return ARTIFACT_RULE_CONFIGURED.name();
34+
}
35+
36+
@Override
37+
public JSONObject getPayload() {
38+
return eventPayload;
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.apicurio.registry.events;
2+
3+
import io.apicurio.registry.storage.dto.ArtifactVersionMetaDataDto;
4+
import io.apicurio.registry.storage.dto.OutboxEvent;
5+
import org.json.JSONObject;
6+
7+
import java.util.UUID;
8+
9+
import static io.apicurio.registry.storage.StorageEventType.ARTIFACT_VERSION_CREATED;
10+
11+
public class ArtifactVersionCreated extends OutboxEvent {
12+
private final JSONObject eventPayload;
13+
14+
private ArtifactVersionCreated(String id, String aggregateId, JSONObject eventPayload) {
15+
super(id, aggregateId);
16+
this.eventPayload = eventPayload;
17+
}
18+
19+
public static ArtifactVersionCreated of(ArtifactVersionMetaDataDto versionMetaDataDto) {
20+
String id = UUID.randomUUID().toString();
21+
JSONObject jsonObject = new JSONObject();
22+
jsonObject.put("id", id).put("groupId", versionMetaDataDto.getGroupId())
23+
.put("artifactId", versionMetaDataDto.getArtifactId())
24+
.put("version", versionMetaDataDto.getVersion()).put("name", versionMetaDataDto.getName())
25+
.put("description", versionMetaDataDto.getDescription())
26+
.put("eventType", ARTIFACT_VERSION_CREATED.name());
27+
28+
return new ArtifactVersionCreated(id, versionMetaDataDto.getGroupId() + "-"
29+
+ versionMetaDataDto.getArtifactId() + "-" + versionMetaDataDto.getVersion(), jsonObject);
30+
}
31+
32+
@Override
33+
public String getType() {
34+
return ARTIFACT_VERSION_CREATED.name();
35+
}
36+
37+
@Override
38+
public JSONObject getPayload() {
39+
return eventPayload;
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.apicurio.registry.events;
2+
3+
import io.apicurio.registry.storage.dto.OutboxEvent;
4+
import org.json.JSONObject;
5+
6+
import java.util.UUID;
7+
8+
import static io.apicurio.registry.storage.StorageEventType.ARTIFACT_VERSION_DELETED;
9+
10+
public class ArtifactVersionDeleted extends OutboxEvent {
11+
12+
private final JSONObject eventPayload;
13+
14+
private ArtifactVersionDeleted(String id, String aggregateId, JSONObject eventPayload) {
15+
super(id, aggregateId);
16+
this.eventPayload = eventPayload;
17+
}
18+
19+
public static ArtifactVersionDeleted of(String groupId, String artifactId, String version) {
20+
String id = UUID.randomUUID().toString();
21+
JSONObject jsonObject = new JSONObject();
22+
jsonObject.put("id", id).put("groupId", groupId).put("artifactId", artifactId).put("version", version)
23+
.put("eventType", ARTIFACT_VERSION_DELETED.name());
24+
25+
return new ArtifactVersionDeleted(id, groupId + "-" + artifactId + "-" + version, jsonObject);
26+
}
27+
28+
@Override
29+
public String getType() {
30+
return ARTIFACT_VERSION_DELETED.name();
31+
}
32+
33+
@Override
34+
public JSONObject getPayload() {
35+
return eventPayload;
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.apicurio.registry.events;
2+
3+
import io.apicurio.registry.storage.dto.EditableVersionMetaDataDto;
4+
import io.apicurio.registry.storage.dto.OutboxEvent;
5+
import org.json.JSONObject;
6+
7+
import java.util.UUID;
8+
9+
import static io.apicurio.registry.storage.StorageEventType.ARTIFACT_VERSION_METADATA_UPDATED;
10+
11+
public class ArtifactVersionMetadataUpdated extends OutboxEvent {
12+
13+
private final JSONObject eventPayload;
14+
15+
private ArtifactVersionMetadataUpdated(String id, String aggregateId, JSONObject eventPayload) {
16+
super(id, aggregateId);
17+
this.eventPayload = eventPayload;
18+
}
19+
20+
public static ArtifactVersionMetadataUpdated of(String groupId, String artifactId, String version,
21+
EditableVersionMetaDataDto editableVersionMetaDataDto) {
22+
String id = UUID.randomUUID().toString();
23+
JSONObject jsonObject = new JSONObject();
24+
jsonObject.put("id", id).put("groupId", groupId).put("artifactId", artifactId).put("version", version)
25+
.put("name", editableVersionMetaDataDto.getName())
26+
.put("description", editableVersionMetaDataDto.getDescription())
27+
.put("eventType", ARTIFACT_VERSION_METADATA_UPDATED.name());
28+
29+
return new ArtifactVersionMetadataUpdated(id, groupId + "-" + artifactId + "-" + version, jsonObject);
30+
}
31+
32+
@Override
33+
public String getType() {
34+
return ARTIFACT_VERSION_METADATA_UPDATED.name();
35+
}
36+
37+
@Override
38+
public JSONObject getPayload() {
39+
return eventPayload;
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.apicurio.registry.events;
2+
3+
import io.apicurio.registry.storage.dto.OutboxEvent;
4+
import io.apicurio.registry.storage.dto.RuleConfigurationDto;
5+
import io.apicurio.registry.types.RuleType;
6+
import org.json.JSONObject;
7+
8+
import java.util.UUID;
9+
10+
import static io.apicurio.registry.storage.StorageEventType.GLOBAL_RULE_CONFIGURED;
11+
12+
public class GlobalRuleConfigured extends OutboxEvent {
13+
private final JSONObject eventPayload;
14+
15+
private GlobalRuleConfigured(String id, String aggregateId, JSONObject eventPayload) {
16+
super(id, aggregateId);
17+
this.eventPayload = eventPayload;
18+
}
19+
20+
public static GlobalRuleConfigured of(RuleType ruleType, RuleConfigurationDto rule) {
21+
String id = UUID.randomUUID().toString();
22+
JSONObject jsonObject = new JSONObject();
23+
jsonObject.put("id", id).put("ruleType", ruleType.value()).put("rule", rule.getConfiguration())
24+
.put("eventType", GLOBAL_RULE_CONFIGURED.name());
25+
26+
return new GlobalRuleConfigured(id, ruleType.value(), jsonObject);
27+
}
28+
29+
@Override
30+
public String getType() {
31+
return GLOBAL_RULE_CONFIGURED.name();
32+
}
33+
34+
@Override
35+
public JSONObject getPayload() {
36+
return eventPayload;
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.apicurio.registry.events;
2+
3+
import io.apicurio.registry.storage.dto.GroupMetaDataDto;
4+
import io.apicurio.registry.storage.dto.OutboxEvent;
5+
import org.json.JSONObject;
6+
7+
import java.util.UUID;
8+
9+
import static io.apicurio.registry.storage.StorageEventType.GROUP_CREATED;
10+
11+
public class GroupCreated extends OutboxEvent {
12+
private final JSONObject eventPayload;
13+
14+
private GroupCreated(String id, String aggregateId, JSONObject eventPayload) {
15+
super(id, aggregateId);
16+
this.eventPayload = eventPayload;
17+
}
18+
19+
public static GroupCreated of(GroupMetaDataDto groupMetaDataDto) {
20+
String id = UUID.randomUUID().toString();
21+
JSONObject jsonObject = new JSONObject();
22+
jsonObject.put("id", id).put("groupId", groupMetaDataDto.getGroupId()).put("eventType",
23+
GROUP_CREATED.name());
24+
25+
return new GroupCreated(id, groupMetaDataDto.getGroupId(), jsonObject);
26+
}
27+
28+
@Override
29+
public String getType() {
30+
return GROUP_CREATED.name();
31+
}
32+
33+
@Override
34+
public JSONObject getPayload() {
35+
return eventPayload;
36+
}
37+
}

0 commit comments

Comments
 (0)