Skip to content

Commit 80c4617

Browse files
committed
Add analytics context
1 parent e727b13 commit 80c4617

File tree

10 files changed

+141
-2
lines changed

10 files changed

+141
-2
lines changed
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
#Mon Dec 23 16:15:02 CET 2019
2+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
13
distributionBase=GRADLE_USER_HOME
24
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
4-
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6+
zipStoreBase=GRADLE_USER_HOME

settings.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ rootProject.name = 'java-ddd-skeleton'
33
include ':shared'
44
project(':shared').projectDir = new File('src/shared')
55

6+
include ':analytics'
7+
project(':analytics').projectDir = new File('src/analytics')
8+
69
include ':backoffice'
710
project(':backoffice').projectDir = new File('src/backoffice')
811

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package tv.codely.analytics.domain_events.application.store;
2+
3+
import tv.codely.analytics.domain_events.domain.*;
4+
5+
public final class DomainEventStorer {
6+
private DomainEventsRepository repository;
7+
8+
public DomainEventStorer(DomainEventsRepository repository) {
9+
this.repository = repository;
10+
}
11+
12+
public void store(
13+
AnalyticsDomainEventId id,
14+
AnalyticsDomainEventAggregateId aggregateId,
15+
AnalyticsDomainEventName name,
16+
AnalyticsDomainEventBody body
17+
) {
18+
AnalyticsDomainEvent domainEvent = new AnalyticsDomainEvent(id, aggregateId, name, body);
19+
20+
repository.save(domainEvent);
21+
}
22+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package tv.codely.analytics.domain_events.application.store;
2+
3+
import org.springframework.context.event.EventListener;
4+
import tv.codely.analytics.domain_events.domain.AnalyticsDomainEventAggregateId;
5+
import tv.codely.analytics.domain_events.domain.AnalyticsDomainEventBody;
6+
import tv.codely.analytics.domain_events.domain.AnalyticsDomainEventId;
7+
import tv.codely.analytics.domain_events.domain.AnalyticsDomainEventName;
8+
import tv.codely.shared.domain.bus.event.DomainEvent;
9+
import tv.codely.shared.domain.bus.event.DomainEventSubscriber;
10+
11+
@DomainEventSubscriber({DomainEvent.class})
12+
public final class StoreDomainEventOnOccurred {
13+
private final DomainEventStorer storer;
14+
15+
public StoreDomainEventOnOccurred(DomainEventStorer storer) {
16+
this.storer = storer;
17+
}
18+
19+
@EventListener
20+
public void on(DomainEvent event) {
21+
AnalyticsDomainEventId id = new AnalyticsDomainEventId(event.eventId());
22+
AnalyticsDomainEventAggregateId aggregateId = new AnalyticsDomainEventAggregateId(event.aggregateId());
23+
AnalyticsDomainEventName name = new AnalyticsDomainEventName(event.eventName());
24+
AnalyticsDomainEventBody body = new AnalyticsDomainEventBody(event.toPrimitives());
25+
26+
storer.store(id, aggregateId, name, body);
27+
}
28+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package tv.codely.analytics.domain_events.domain;
2+
3+
public final class AnalyticsDomainEvent {
4+
private final AnalyticsDomainEventId id;
5+
private final AnalyticsDomainEventAggregateId aggregateId;
6+
private final AnalyticsDomainEventName name;
7+
private final AnalyticsDomainEventBody body;
8+
9+
public AnalyticsDomainEvent(
10+
AnalyticsDomainEventId id,
11+
AnalyticsDomainEventAggregateId aggregateId,
12+
AnalyticsDomainEventName name,
13+
AnalyticsDomainEventBody body
14+
) {
15+
16+
this.id = id;
17+
this.aggregateId = aggregateId;
18+
this.name = name;
19+
this.body = body;
20+
}
21+
22+
public AnalyticsDomainEventId getId() {
23+
return id;
24+
}
25+
26+
public AnalyticsDomainEventAggregateId getAggregateId() {
27+
return aggregateId;
28+
}
29+
30+
public AnalyticsDomainEventName getName() {
31+
return name;
32+
}
33+
34+
public AnalyticsDomainEventBody getBody() {
35+
return body;
36+
}
37+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package tv.codely.analytics.domain_events.domain;
2+
3+
import tv.codely.shared.domain.Identifier;
4+
5+
public final class AnalyticsDomainEventAggregateId extends Identifier {
6+
public AnalyticsDomainEventAggregateId(String value) {
7+
super(value);
8+
}
9+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package tv.codely.analytics.domain_events.domain;
2+
3+
import java.io.Serializable;
4+
import java.util.HashMap;
5+
6+
public final class AnalyticsDomainEventBody {
7+
private HashMap<String, Serializable> value;
8+
9+
public HashMap<String, Serializable> getValue() {
10+
return value;
11+
}
12+
13+
public AnalyticsDomainEventBody(HashMap<String, Serializable> value) {
14+
this.value = value;
15+
}
16+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package tv.codely.analytics.domain_events.domain;
2+
3+
import tv.codely.shared.domain.Identifier;
4+
5+
public final class AnalyticsDomainEventId extends Identifier {
6+
public AnalyticsDomainEventId(String value) {
7+
super(value);
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package tv.codely.analytics.domain_events.domain;
2+
3+
import tv.codely.shared.domain.StringValueObject;
4+
5+
public final class AnalyticsDomainEventName extends StringValueObject {
6+
public AnalyticsDomainEventName(String value) {
7+
super(value);
8+
}
9+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package tv.codely.analytics.domain_events.domain;
2+
3+
public interface DomainEventsRepository {
4+
void save(AnalyticsDomainEvent event);
5+
}

0 commit comments

Comments
 (0)