Skip to content

Commit

Permalink
Merge branch 'main' into GROUP-91-Missing-Events
Browse files Browse the repository at this point in the history
  • Loading branch information
makmn1 committed Mar 1, 2024
2 parents ebff752 + 7b0fef0 commit e7d9562
Show file tree
Hide file tree
Showing 12 changed files with 69 additions and 42 deletions.
1 change: 0 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ dependencies {
// Test Fixtures Dependencies
testFixturesImplementation 'com.github.javafaker:javafaker:1.0.2'


// Acceptance Test Dependencies
testAcceptanceImplementation 'org.awaitility:awaitility:4.2.0'
testAcceptanceImplementation 'org.springframework.boot:spring-boot-starter-test'
Expand Down
4 changes: 3 additions & 1 deletion config/pmd/codestyle.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@
<property name="minimum" value="2" />
</properties>
</rule>
<rule ref="category/java/codestyle.xml/UnnecessaryAnnotationValueElement" />
<rule ref="category/java/codestyle.xml/UnnecessaryCast" />
<rule ref="category/java/codestyle.xml/UnnecessaryConstructor" />
<rule ref="category/java/codestyle.xml/UnnecessaryFullyQualifiedName" />
Expand Down Expand Up @@ -86,4 +85,7 @@
<!-- Tests require this limit to be arbitrarily high, rendering this rule useless. -->
<!-- <rule ref="category/java/codestyle.xml/TooManyStaticImports" />-->

<!-- Doesn't work well with Jackson @JsonIgnoreProperties(value = {"@type"}) for records / classes -->
<!-- <rule ref="category/java/codestyle.xml/UnnecessaryAnnotationValueElement" />-->

</ruleset>
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package org.grouphq.groupsync.group.domain;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.time.Instant;
import lombok.extern.slf4j.Slf4j;
import org.grouphq.groupsync.groupservice.domain.members.Member;
import org.grouphq.groupsync.groupservice.domain.outbox.EventDataModel;
import org.grouphq.groupsync.groupservice.domain.outbox.OutboxEvent;
import org.grouphq.groupsync.groupservice.domain.outbox.enums.AggregateType;
import org.grouphq.groupsync.groupservice.domain.outbox.enums.EventStatus;
Expand All @@ -24,7 +24,7 @@
*/
@Slf4j
public record PublicOutboxEvent(Long aggregateId, AggregateType aggregateType,
EventType eventType, String eventData,
EventType eventType, EventDataModel eventData,
EventStatus eventStatus, Instant createdDate) {

private static final ObjectMapper OBJECT_MAPPER;
Expand Down Expand Up @@ -55,22 +55,14 @@ private static PublicOutboxEvent convertGroupStatusUpdated(OutboxEvent outboxEve
private static PublicOutboxEvent convertMemberJoined(OutboxEvent outboxEvent) {
PublicOutboxEvent publicOutboxEvent;

try {
final Member member = OBJECT_MAPPER.readValue(outboxEvent.getEventData(), Member.class);
publicOutboxEvent = new PublicOutboxEvent(
outboxEvent.getAggregateId(),
outboxEvent.getAggregateType(),
outboxEvent.getEventType(),
OBJECT_MAPPER.writeValueAsString(Member.toPublicMember(member)),
outboxEvent.getEventStatus(),
outboxEvent.getCreatedDate()
);
} catch (JsonProcessingException exception) {
log.error("Error while trying to convert member joined outbox event to "
+ "public outbox event. Converting to default event. Event: {}",
outboxEvent, exception);
publicOutboxEvent = convertDefault(outboxEvent);
}
publicOutboxEvent = new PublicOutboxEvent(
outboxEvent.getAggregateId(),
outboxEvent.getAggregateType(),
outboxEvent.getEventType(),
Member.toPublicMember((Member) outboxEvent.getEventData()),
outboxEvent.getEventStatus(),
outboxEvent.getCreatedDate()
);

return publicOutboxEvent;
}
Expand All @@ -90,5 +82,14 @@ private static PublicOutboxEvent convertDefault(OutboxEvent outboxEvent) {
);
}


public PublicOutboxEvent withNewEventData(EventDataModel eventDataModel) {
return new PublicOutboxEvent(
this.aggregateId(),
this.aggregateType(),
this.eventType,
eventDataModel,
this.eventStatus,
this.createdDate
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.time.Instant;
import java.util.List;
import org.grouphq.groupsync.groupservice.domain.outbox.EventDataModel;
import org.grouphq.groupsync.groupservice.web.objects.egress.PublicMember;

/**
Expand Down Expand Up @@ -32,7 +33,7 @@ public record Group(
String lastModifiedBy,
int version,
List<PublicMember> members
) {
) implements EventDataModel {
public static Group of(String title, String description,
int maxGroupSize, GroupStatus status) {
return new Group(null, title, description, maxGroupSize, status,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

import java.time.Instant;
import java.util.UUID;
import org.grouphq.groupsync.groupservice.domain.outbox.EventDataModel;
import org.grouphq.groupsync.groupservice.web.objects.egress.PublicMember;

/**
* A member model.
* A member model. The @type annotation is temporarily being ignored until GROUP-89 is resolved.
*
* @param id A unique ID belonging to a member
* @param websocketId The user's websocket ID for the request
Expand Down Expand Up @@ -38,7 +39,7 @@ public record Member(
String lastModifiedBy,

int version
) {
) implements EventDataModel {
public static Member of(String username, Long groupId) {
return new Member(null, UUID.randomUUID(), username, groupId, MemberStatus.ACTIVE, null,
null, null, null, null, 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
*/
public record ErrorData(
String error
) {
) implements EventDataModel {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.grouphq.groupsync.groupservice.domain.outbox;

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.grouphq.groupsync.groupservice.domain.groups.Group;
import org.grouphq.groupsync.groupservice.domain.members.Member;
import org.grouphq.groupsync.groupservice.web.objects.egress.PublicMember;

/**
* Marker interface for objects sent in events.
*/
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@JsonSubTypes({
@JsonSubTypes.Type(value = Group.class, name = "Group"),
@JsonSubTypes.Type(value = Member.class, name = "Member"),
@JsonSubTypes.Type(value = PublicMember.class, name = "PublicMember"),
@JsonSubTypes.Type(value = ErrorData.class, name = "ErrorData")
})
public interface EventDataModel {
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ public class OutboxEvent {
private final String websocketId;
private final AggregateType aggregateType;
private final EventType eventType;
private final String eventData;
private final EventDataModel eventData;
private final EventStatus eventStatus;
private final Instant createdDate;

public static OutboxEvent of(UUID eventId, Long aggregateId, AggregateType aggregateType,
EventType eventType, String eventData, EventStatus eventStatus,
EventType eventType, EventDataModel eventData, EventStatus eventStatus,
String websocketId) {
return new OutboxEvent(eventId, aggregateId, websocketId, aggregateType,
eventType, eventData, eventStatus, Instant.now());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.grouphq.groupsync.groupservice.web.objects.egress;

import org.grouphq.groupsync.groupservice.domain.members.MemberStatus;
import org.grouphq.groupsync.groupservice.domain.outbox.EventDataModel;

/**
* A data-access-object representing a member model containing
Expand All @@ -21,5 +22,5 @@ public record PublicMember(
String joinedDate,

String exitedDate
) {
) implements EventDataModel {
}
3 changes: 2 additions & 1 deletion src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ spring:
max-interval: 50000
max-attempts: 6
function:
definition: processedEvents
definition: |
processedEvents;
stream:
bindings:
groupCreateRequests-out-0:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.grouphq.groupsync.cucumber.steps;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.javafaker.Faker;
import io.cucumber.java.After;
import io.cucumber.java.Before;
Expand Down Expand Up @@ -68,9 +66,6 @@ public class MemberPolicy {

private String httpBasicCredentialsEncoded;

@Autowired
private ObjectMapper objectMapper;

@Autowired
private RSocketRequester.Builder builder;

Expand Down Expand Up @@ -217,7 +212,7 @@ public void iShouldNoLongerBeAnActiveMemberOfThatGroup() {
}

@And("I am a member of the group")
public void iAmAMemberOfTheGroup() throws JsonProcessingException {
public void iAmAMemberOfTheGroup() {
requestEvent = GroupTestUtility.generateGroupJoinRequestEvent(userId, username, group.id());

OUTBOX_EVENTS.clear();
Expand All @@ -235,7 +230,7 @@ public void iAmAMemberOfTheGroup() throws JsonProcessingException {
await().atMost(5, TimeUnit.SECONDS).until(() -> !OUTBOX_EVENTS.isEmpty());

event = OUTBOX_EVENTS.getLast();
member = objectMapper.readValue(event.getEventData(), Member.class);
member = (Member) event.getEventData();

webTestClient
.get()
Expand Down
18 changes: 12 additions & 6 deletions src/testFixtures/java/org/grouphq/groupsync/GroupTestUtility.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.grouphq.groupsync.groupservice.domain.groups.GroupStatus;
import org.grouphq.groupsync.groupservice.domain.members.Member;
import org.grouphq.groupsync.groupservice.domain.members.MemberStatus;
import org.grouphq.groupsync.groupservice.domain.outbox.EventDataModel;
import org.grouphq.groupsync.groupservice.domain.outbox.OutboxEvent;
import org.grouphq.groupsync.groupservice.domain.outbox.enums.AggregateType;
import org.grouphq.groupsync.groupservice.domain.outbox.enums.EventStatus;
Expand All @@ -21,7 +22,7 @@
*/
public final class GroupTestUtility {

public static final Faker FAKER = new Faker();
private static final Faker FAKER = new Faker();
static final String OWNER = "system";

private GroupTestUtility() {}
Expand Down Expand Up @@ -353,32 +354,37 @@ public static GroupStatusRequestEvent generateGroupStatusRequestEvent(
* @return an OutboxEvent object with all details.
*/
public static OutboxEvent generateOutboxEvent() {
EventDataModel eventData;

eventData = GroupTestUtility.generateFullGroupDetails(GroupStatus.ACTIVE);

return new OutboxEvent(
UUID.randomUUID(),
FAKER.number().randomNumber(12, true),
UUID.randomUUID().toString(),
AggregateType.GROUP,
EventType.GROUP_CREATED,
"{\"status\": \"ACTIVE\"}",
eventData,
EventStatus.SUCCESSFUL,
Instant.now()
);
}

/**
* Overloaded method for {@link #generateOutboxEvent()}.
* Overloaded method for {@link #generateOutboxEvent()} ()}.
*/
public static OutboxEvent generateOutboxEvent(String webSocketId, EventStatus eventStatus) {
final Faker faker = new Faker();
EventDataModel eventData;

eventData = GroupTestUtility.generateFullGroupDetails(GroupStatus.ACTIVE);

return new OutboxEvent(
UUID.randomUUID(),
faker.number().randomNumber(12, true),
FAKER.number().randomNumber(12, true),
webSocketId,
AggregateType.GROUP,
EventType.GROUP_CREATED,
"{\"status\": \"ACTIVE\"}",
eventData,
eventStatus,
Instant.now()
);
Expand Down

0 comments on commit e7d9562

Please sign in to comment.