Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Marc Gorzala committed Mar 25, 2024
1 parent 78e1eb3 commit c59fcac
Show file tree
Hide file tree
Showing 14 changed files with 146 additions and 39 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package net.dancier.kikeriki.application.domain.model.events;
package net.dancier.kikeriki.adapter.in.kafka;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import org.springframework.mail.SimpleMailMessage;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class EmailSendingRequestedEvent extends SimpleMailMessage {
public class EmailSendingRequestedCommandDto extends SimpleMailMessage {
private String id;
public void setId(String id) {
this.id = id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,15 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import io.cloudevents.CloudEvent;
import lombok.RequiredArgsConstructor;
import net.dancier.kikeriki.application.domain.model.events.MessagePostedEvent;
import net.dancier.kikeriki.application.domain.model.events.MessageReadEvent;
import net.dancier.kikeriki.application.domain.model.messages.MessagePostedEvent;
import net.dancier.kikeriki.application.domain.model.messages.MessageReadEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.time.LocalDateTime;

@RequiredArgsConstructor
@Component
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package net.dancier.kikeriki.adapter.in.kafka;


import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.cloudevents.CloudEvent;
import lombok.RequiredArgsConstructor;
import net.dancier.kikeriki.application.domain.model.events.EmailSendingRequestedEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.mail.MailSender;
import org.springframework.stereotype.Component;

import java.io.IOException;
Expand All @@ -29,12 +26,12 @@ public class MailCommandListener {
void listener(CloudEvent cloudEvent) {
log.info("Got Mail Command: " + cloudEvent);
try {
EmailSendingRequestedEvent emailSendingRequestedEvent = objectMapper.readValue(cloudEvent.getData().toBytes(), EmailSendingRequestedEvent.class);
log.info("Got that request to send a mail: {}", emailSendingRequestedEvent);
emailSendingRequestedEvent.setId(cloudEvent.getId());
applicationEventPublisher.publishEvent(emailSendingRequestedEvent);
EmailSendingRequestedCommandDto emailSendingRequestedCommand = objectMapper.readValue(cloudEvent.getData().toBytes(), EmailSendingRequestedCommandDto.class);
log.info("Got that request to send a mail: {}", emailSendingRequestedCommand);
emailSendingRequestedCommand.setId(cloudEvent.getId());
applicationEventPublisher.publishEvent(emailSendingRequestedCommand);
} catch (IOException ioe) {
log.info(ioe.toString());
log.error(ioe.toString());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package net.dancier.kikeriki.adapter.out.mail;

import lombok.RequiredArgsConstructor;
import net.dancier.kikeriki.application.domain.model.events.EmailSendingRequestedEvent;
import net.dancier.kikeriki.application.domain.model.messages.EmailSendingRequestedCommand;
import net.dancier.kikeriki.application.port.DancierSendMailPort;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
Expand All @@ -19,13 +18,13 @@ public class DancierSendMailAdapter implements DancierSendMailPort {
public final MailOutboxJpaRepository mailOutboxJpaRepository;

@Override
public void schedule(EmailSendingRequestedEvent emailSendingRequestedEvent) {
log.info("Storing message for later delivery: {}", emailSendingRequestedEvent);
public void schedule(EmailSendingRequestedCommand emailSendingRequestedCommand) {
log.info("Storing message for later delivery: {}", emailSendingRequestedCommand);
MailOutboxJpaEntity mailOutboxJpaEntity = new MailOutboxJpaEntity();
mailOutboxJpaEntity.setId(emailSendingRequestedEvent.getId());
mailOutboxJpaEntity.setId(emailSendingRequestedCommand.getId());
mailOutboxJpaEntity.setStatus(MailOutboxJpaEntity.STATUS.NEW);
mailOutboxJpaEntity.setCreatedAt(LocalDateTime.now());
mailOutboxJpaEntity.setEmailSendingRequestedEvent(emailSendingRequestedEvent);
mailOutboxJpaEntity.setEmailSendingRequestedCommand(emailSendingRequestedCommand);
mailOutboxJpaRepository.save(mailOutboxJpaEntity);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package net.dancier.kikeriki.adapter.out.mail;

import com.fasterxml.jackson.databind.JsonNode;
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.dancier.kikeriki.application.domain.model.events.EmailSendingRequestedEvent;
import net.dancier.kikeriki.application.domain.model.messages.EmailSendingRequestedCommand;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;

Expand All @@ -24,7 +23,7 @@ public class MailOutboxJpaEntity {

@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "mail")
private EmailSendingRequestedEvent emailSendingRequestedEvent;
private EmailSendingRequestedCommand emailSendingRequestedCommand;

private LocalDateTime createdAt;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ private void sendMail(MailOutboxJpaEntity item) {
log.info("Sending the mail via SMTP: {}", item);
log.info("And sender: {}", javaMailSender);
try {
javaMailSender.send(item.getEmailSendingRequestedEvent());
javaMailSender.send(Util.commandToSimpleMailMessage(item.getEmailSendingRequestedCommand()));
item.setStatus(DONE);
} catch (MailAuthenticationException mailAuthenticationException) {
item.setStatus(TEMPORARY_FAILED);
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/net/dancier/kikeriki/adapter/out/mail/Util.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package net.dancier.kikeriki.adapter.out.mail;

import net.dancier.kikeriki.application.domain.model.messages.EmailSendingRequestedCommand;
import org.springframework.mail.SimpleMailMessage;

public class Util {

public static SimpleMailMessage commandToSimpleMailMessage(EmailSendingRequestedCommand command) {
SimpleMailMessage result = new SimpleMailMessage();
result.setTo(command.getTo());
result.setFrom(command.getFrom());
result.setSubject(command.getSubject());
result.setText(command.getText());
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package net.dancier.kikeriki.application.domain.model.messages;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.mail.SimpleMailMessage;

@JsonInclude(JsonInclude.Include.NON_NULL)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public class EmailSendingRequestedCommand {
private final String id;
private final String[] to;
private final String from;
private final String[] cc;
private final String[] bcc;
private final String subject;
private final String text;

public static class EmailSendingRequestedCommandBuilder {
private String id;
private String[] to;
private String from;
private String[] cc;
private String[] bcc;
private String subject;
private String text;

public EmailSendingRequestedCommandBuilder setId(String id) {
this.id = id;
return this;
}

public EmailSendingRequestedCommandBuilder setTo(String[] to) {
this.to = to;
return this;
}

public EmailSendingRequestedCommandBuilder setFrom(String from) {
this.from = from;
return this;
}

public EmailSendingRequestedCommandBuilder setCc(String[] cc) {
this.cc = cc;
return this;
}

public EmailSendingRequestedCommandBuilder setBcc(String[] bcc) {
this.bcc = bcc;
return this;
}

public EmailSendingRequestedCommandBuilder setSubject(String subject) {
this.subject = subject;
return this;
}

public EmailSendingRequestedCommandBuilder setText(String text) {
this.text = text;
return this;
}
public EmailSendingRequestedCommand build() {
return new EmailSendingRequestedCommand(id, to, from, cc, bcc, subject, text);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package net.dancier.kikeriki.application.domain.model.events;
package net.dancier.kikeriki.application.domain.model.messages;

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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.dancier.kikeriki.application.domain.model.events;
package net.dancier.kikeriki.application.domain.model.messages;

import lombok.Data;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package net.dancier.kikeriki.application.port;

import net.dancier.kikeriki.application.domain.model.events.EmailSendingRequestedEvent;
import net.dancier.kikeriki.application.domain.model.messages.EmailSendingRequestedCommand;

public interface DancierSendMailPort {

void schedule(EmailSendingRequestedEvent emailSendingRequestedEvent);
void schedule(EmailSendingRequestedCommand emailSendingRequestedCommand);

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package net.dancier.kikeriki.application.service;

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.events.MessageReadEvent;
import net.dancier.kikeriki.application.domain.model.messages.EmailSendingRequestedCommand;
import net.dancier.kikeriki.application.domain.model.messages.MessagePostedEvent;
import net.dancier.kikeriki.application.domain.model.messages.MessageReadEvent;
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;
Expand All @@ -27,7 +27,7 @@ public class ApplicationEventListeners {


@EventListener
public void handle(EmailSendingRequestedEvent event) {
public void handle(EmailSendingRequestedCommand event) {
log.info("I go a request to directly send an email. I will schedule that.: {}", event);
sendMailPort.schedule(event);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.dancier.kikeriki.adapter.out.mail;

import net.dancier.kikeriki.NeededInfrastructureBaseTestClass;
import net.dancier.kikeriki.application.domain.model.events.EmailSendingRequestedEvent;
import net.dancier.kikeriki.application.domain.model.messages.EmailSendingRequestedCommand;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
Expand Down Expand Up @@ -47,9 +47,9 @@ public void scheduleAndSendTest() {
);
}

private EmailSendingRequestedEvent getDummy() {
EmailSendingRequestedEvent emailSendingRequestedEvent = new EmailSendingRequestedEvent();
emailSendingRequestedEvent.setId(UUID.randomUUID().toString());
return emailSendingRequestedEvent;
private EmailSendingRequestedCommand getDummy() {
return new EmailSendingRequestedCommand.EmailSendingRequestedCommandBuilder()
.setId(UUID.randomUUID().toString())
.build();
}
}
32 changes: 32 additions & 0 deletions src/test/java/net/dancier/kikeriki/adapter/out/mail/UtilTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package net.dancier.kikeriki.adapter.out.mail;

import net.dancier.kikeriki.application.domain.model.messages.EmailSendingRequestedCommand;
import org.junit.jupiter.api.Test;
import org.springframework.mail.SimpleMailMessage;

import java.util.UUID;

import static org.assertj.core.api.Assertions.assertThat;

class UtilTest {

@Test
public void testCommandToSimpleMailMessage() {
EmailSendingRequestedCommand command = new EmailSendingRequestedCommand.EmailSendingRequestedCommandBuilder()
.setId(UUID.randomUUID().toString())
.setTo(new String[]{"bar"})
.setFrom("foo")
.setSubject("why")
.setText("reson")
.build();

SimpleMailMessage result = Util.commandToSimpleMailMessage(command);

assertThat(result).isNotNull();
assertThat(result.getTo()).isNotEmpty();
assertThat(result.getFrom()).isEqualTo("foo");
assertThat(result.getSubject()).isEqualTo("why");
assertThat(result.getText()).isEqualTo("reson");
}

}

0 comments on commit c59fcac

Please sign in to comment.