From 68662a64589f4805495fec30efee78280b78f80a Mon Sep 17 00:00:00 2001 From: Marc Gorzala Date: Sat, 6 Jan 2024 18:56:43 +0100 Subject: [PATCH] dummy save --- .../state/PostgreSQLStateAdapter.java | 31 +++++++++++++++++++ .../out/persistence/state/StateJpaEntity.java | 31 +++++++++++++++++++ .../persistence/state/StateJpaRepository.java | 6 ++++ .../model/events/MessagePostedEvent.java | 13 +++++++- .../application/domain/model/state/State.java | 2 +- .../kikeriki/application/port/StatePort.java | 2 +- .../service/ApplicationEventListeners.java | 17 ++++++++++ src/main/resources/application.yml | 2 ++ src/main/resources/liquibase-changeLog.xml | 9 ++++++ .../net/dancier/kikeriki/MailSystemTest.java | 1 - .../application/domain/model/StateTest.java | 6 ++-- 11 files changed, 113 insertions(+), 7 deletions(-) create mode 100644 src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/PostgreSQLStateAdapter.java create mode 100644 src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/StateJpaEntity.java create mode 100644 src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/StateJpaRepository.java diff --git a/src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/PostgreSQLStateAdapter.java b/src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/PostgreSQLStateAdapter.java new file mode 100644 index 0000000..7a6f8fd --- /dev/null +++ b/src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/PostgreSQLStateAdapter.java @@ -0,0 +1,31 @@ +package net.dancier.kikeriki.adapter.out.persistence.state; + +import lombok.RequiredArgsConstructor; +import net.dancier.kikeriki.application.domain.model.state.State; +import net.dancier.kikeriki.application.port.StatePort; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import java.util.UUID; + + +@RequiredArgsConstructor +@Component +public class PostgreSQLStateAdapter implements StatePort { + + private final StateJpaRepository stateJpaRepository; + + @Override + public State get(UUID dancerId) { + return null; + } + + @Override + public void save(State state, String dancerId) { + StateJpaEntity stateJpaEntity = new StateJpaEntity(); + stateJpaEntity.setDancer_id(dancerId); + stateJpaEntity.setData(new StateJpaEntity.Data()); + stateJpaRepository.save(stateJpaEntity); + } +} diff --git a/src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/StateJpaEntity.java b/src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/StateJpaEntity.java new file mode 100644 index 0000000..a25b45a --- /dev/null +++ b/src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/StateJpaEntity.java @@ -0,0 +1,31 @@ +package net.dancier.kikeriki.adapter.out.persistence.state; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; + +import java.util.UUID; + +@Data +@Table(name ="state") +@Entity +public class StateJpaEntity { + + @Id + private String dancer_id; + + @JdbcTypeCode(SqlTypes.JSON) + @Column(name = "data") + private Data data; + + + @lombok.Data + public static class Data { + + } + +} diff --git a/src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/StateJpaRepository.java b/src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/StateJpaRepository.java new file mode 100644 index 0000000..e1245b8 --- /dev/null +++ b/src/main/java/net/dancier/kikeriki/adapter/out/persistence/state/StateJpaRepository.java @@ -0,0 +1,6 @@ +package net.dancier.kikeriki.adapter.out.persistence.state; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StateJpaRepository + extends JpaRepository {} diff --git a/src/main/java/net/dancier/kikeriki/application/domain/model/events/MessagePostedEvent.java b/src/main/java/net/dancier/kikeriki/application/domain/model/events/MessagePostedEvent.java index fe167df..4d734c4 100644 --- a/src/main/java/net/dancier/kikeriki/application/domain/model/events/MessagePostedEvent.java +++ b/src/main/java/net/dancier/kikeriki/application/domain/model/events/MessagePostedEvent.java @@ -1,12 +1,23 @@ package net.dancier.kikeriki.application.domain.model.events; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.Data; +import java.time.LocalDateTime; +import java.util.List; import java.util.UUID; @Data public class MessagePostedEvent { - UUID messageId; + @NotNull + String messageId; + + @NotEmpty + List recipients; + + @NotNull + LocalDateTime createdAd; } diff --git a/src/main/java/net/dancier/kikeriki/application/domain/model/state/State.java b/src/main/java/net/dancier/kikeriki/application/domain/model/state/State.java index d4dee28..f2cba54 100644 --- a/src/main/java/net/dancier/kikeriki/application/domain/model/state/State.java +++ b/src/main/java/net/dancier/kikeriki/application/domain/model/state/State.java @@ -15,7 +15,7 @@ public class State { private Optional optSentLastMessage = Optional.empty(); - public void setLastMessage(@NonNull MailMessage mailMessage) { + public void setLastMailMessage(@NonNull MailMessage mailMessage) { this.optSentLastMessage = Optional.of(mailMessage); } diff --git a/src/main/java/net/dancier/kikeriki/application/port/StatePort.java b/src/main/java/net/dancier/kikeriki/application/port/StatePort.java index 5a5df60..b31424c 100644 --- a/src/main/java/net/dancier/kikeriki/application/port/StatePort.java +++ b/src/main/java/net/dancier/kikeriki/application/port/StatePort.java @@ -8,6 +8,6 @@ public interface StatePort { State get(UUID dancerId); - void save(State state); + void save(State state, String dancer_id); } diff --git a/src/main/java/net/dancier/kikeriki/application/service/ApplicationEventListeners.java b/src/main/java/net/dancier/kikeriki/application/service/ApplicationEventListeners.java index fd3dabc..52c892e 100644 --- a/src/main/java/net/dancier/kikeriki/application/service/ApplicationEventListeners.java +++ b/src/main/java/net/dancier/kikeriki/application/service/ApplicationEventListeners.java @@ -3,20 +3,29 @@ import lombok.RequiredArgsConstructor; import net.dancier.kikeriki.application.domain.model.events.EmailSendingRequestedEvent; import net.dancier.kikeriki.application.domain.model.events.MessagePostedEvent; +import net.dancier.kikeriki.application.domain.model.state.State; +import net.dancier.kikeriki.application.domain.model.state.UnreadChatMessage; import net.dancier.kikeriki.application.port.DancierSendMailPort; +import net.dancier.kikeriki.application.port.StatePort; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.UUID; + @RequiredArgsConstructor @Component public class ApplicationEventListeners { + private final StatePort statePort; + public static final Logger log = LoggerFactory.getLogger(ApplicationEventListeners.class); private final DancierSendMailPort sendMailPort; + @EventListener public void handle(EmailSendingRequestedEvent event) { log.info("Handling: {}", event); @@ -26,6 +35,14 @@ public void handle(EmailSendingRequestedEvent event) { @EventListener public void handle(MessagePostedEvent messagePostedEvent) { log.info("Handling MessagePostedEvent: " + messagePostedEvent); + State state = new State(); + statePort.save(state, UUID.randomUUID().toString()); + var unreadChatMessage = UnreadChatMessage.of(messagePostedEvent.getMessageId(),messagePostedEvent.getCreatedAd()); + List recipients = messagePostedEvent.getRecipients(); + for(UUID recipientId : recipients) { + var recipientState = statePort.get(recipientId); + recipientState.addUnreadChatMessage(unreadChatMessage); + } } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 9e65ede..4c088e4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -32,6 +32,8 @@ logging: root: INFO net.dancier: DEBUG app: + state-adapter: + stub: false mail: host: mail.your-server.de port: 465 diff --git a/src/main/resources/liquibase-changeLog.xml b/src/main/resources/liquibase-changeLog.xml index 7d1563d..e61af47 100644 --- a/src/main/resources/liquibase-changeLog.xml +++ b/src/main/resources/liquibase-changeLog.xml @@ -17,4 +17,13 @@ + + + CREATE TABLE state ( + dancer_id VARCHAR(256) PRIMARY KEY, + data JSONB NOT NULL + ); + + + \ No newline at end of file diff --git a/src/test/java/net/dancier/kikeriki/MailSystemTest.java b/src/test/java/net/dancier/kikeriki/MailSystemTest.java index 89fddf0..af17d34 100644 --- a/src/test/java/net/dancier/kikeriki/MailSystemTest.java +++ b/src/test/java/net/dancier/kikeriki/MailSystemTest.java @@ -20,7 +20,6 @@ public class MailSystemTest extends AbstractPostgreSQLEnabledTest{ @Autowired MailOutboxJpaRepository mailOutboxJpaRepository; - @Test public void test() { List all = mailOutboxJpaRepository.findAll(); diff --git a/src/test/java/net/dancier/kikeriki/application/domain/model/StateTest.java b/src/test/java/net/dancier/kikeriki/application/domain/model/StateTest.java index 9169dec..580b30a 100644 --- a/src/test/java/net/dancier/kikeriki/application/domain/model/StateTest.java +++ b/src/test/java/net/dancier/kikeriki/application/domain/model/StateTest.java @@ -22,13 +22,13 @@ public void testTimeOfLastMailMessage() { LocalDateTime now = LocalDateTime.now(); MailMessage mailMessage = MailMessage.of(now); - state.setLastMessage(mailMessage); + state.setLastMailMessage(mailMessage); assertThat(state.getLastTimeMailWasSent()).isNotEmpty(); assertThat(state.getLastTimeMailWasSent().get()).isEqualTo(now); assertThatThrownBy(() -> { - state.setLastMessage(null); + state.setLastMailMessage(null); }).isInstanceOf(NullPointerException.class); } @@ -107,7 +107,7 @@ public void allowedToSendAMail() { assertThat(state.allowedToSendAnotherMail(LocalDate.now())).isTrue(); MailMessage mailMessage = MailMessage.of(LocalDateTime.now()); - state.setLastMessage(mailMessage); + state.setLastMailMessage(mailMessage); assertThat(state.allowedToSendAnotherMail(LocalDate.now())).isFalse();