-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #41 from Callhub-Connect/email-ca
Email Clean Architecture + Tests
- Loading branch information
Showing
14 changed files
with
378 additions
and
81 deletions.
There are no files selected for viewing
75 changes: 75 additions & 0 deletions
75
src/main/java/callhub/connect/data_access/EmailDataAccessObject.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package callhub.connect.data_access; | ||
|
||
import callhub.connect.entities.Message; | ||
import callhub.connect.entities.Session; | ||
import callhub.connect.entities.exceptions.NoMessagesException; | ||
import callhub.connect.entities.exceptions.SessionNotFoundException; | ||
import callhub.connect.use_case.email.EmailDataAccessInterface; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.ArrayList; | ||
|
||
@Service | ||
public class EmailDataAccessObject implements EmailDataAccessInterface { | ||
private final SessionRepository sessionRepository; | ||
|
||
public EmailDataAccessObject(SessionRepository sessionRepository) { | ||
this.sessionRepository = sessionRepository; | ||
} | ||
|
||
/** | ||
* Retrieves the transcript of messages for a given session code. | ||
* | ||
* @param id The session code to identify the session. | ||
* @return A ResponseEntity containing the transcript of messages as a String. | ||
* @throws NullPointerException if there is no session with the id in the sessionRepository. | ||
*/ | ||
@Override | ||
public String getTranscript(String id) { | ||
boolean sessionExists = sessionRepository.existsById(id); | ||
if (!sessionExists) { | ||
throw new SessionNotFoundException("Session not found."); | ||
} | ||
|
||
Session session = sessionRepository.getSessionById(id); | ||
ArrayList<Message> messagesList = session.getMessages(); | ||
|
||
if (!(messagesList.isEmpty())) { | ||
StringBuilder transcript = new StringBuilder(); | ||
for (Message message : messagesList) { | ||
transcript.append(message.formattedMessage()).append("\n"); | ||
} | ||
return transcript.toString(); | ||
} | ||
else{ | ||
throw new NoMessagesException("No messages found."); | ||
} | ||
} | ||
|
||
/** | ||
* Retrieves the date messages were sent for a given session code, assuming all messages | ||
* were sent on the same day as the first message. | ||
* | ||
* @param id The session code to identify the session. | ||
* @return A ResponseEntity containing the date of messages as a String. | ||
* @throws NullPointerException if there is no session with the id in the sessionRepository. | ||
*/ | ||
@Override | ||
public String getDate(String id) { | ||
boolean sessionExists = sessionRepository.existsById(id); | ||
if (!sessionExists) { | ||
throw new SessionNotFoundException("Session not found."); | ||
} | ||
|
||
Session session = sessionRepository.getSessionById(id); | ||
ArrayList<Message> messagesList = session.getMessages(); | ||
|
||
if (!(messagesList.isEmpty())) { | ||
Message firstMessage = messagesList.get(0); | ||
return firstMessage.getDateString(); | ||
} | ||
else { | ||
throw new NoMessagesException("No messages found."); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
src/main/java/callhub/connect/entities/exceptions/NoMessagesException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package callhub.connect.entities.exceptions; | ||
|
||
public class NoMessagesException extends RuntimeException { | ||
public NoMessagesException(String message) { | ||
super(message); | ||
} | ||
} |
7 changes: 7 additions & 0 deletions
7
src/main/java/callhub/connect/entities/exceptions/SessionNotFoundException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package callhub.connect.entities.exceptions; | ||
|
||
public class SessionNotFoundException extends RuntimeException { | ||
public SessionNotFoundException(String message) { | ||
super(message); | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
src/main/java/callhub/connect/interface_adapter/email/EmailController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package callhub.connect.interface_adapter.email; | ||
|
||
import callhub.connect.use_case.email.EmailInputBoundary; | ||
import callhub.connect.use_case.email.EmailInputData; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.PathVariable; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@RestController | ||
@RequestMapping("/email") | ||
public class EmailController { | ||
|
||
@Autowired | ||
private EmailInputBoundary emailInteractor; | ||
|
||
@GetMapping("/transcript/{id}") | ||
public ResponseEntity<String> getTranscript(@PathVariable String id) { | ||
EmailInputData inputData = new EmailInputData(id); | ||
return emailInteractor.getTranscript(inputData); | ||
} | ||
|
||
@GetMapping("/date/{id}") | ||
public ResponseEntity<String> getCode(@PathVariable String id) { | ||
EmailInputData inputData = new EmailInputData(id); | ||
return emailInteractor.getDate(inputData); | ||
} | ||
} |
14 changes: 14 additions & 0 deletions
14
src/main/java/callhub/connect/interface_adapter/email/EmailPresenter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package callhub.connect.interface_adapter.email; | ||
|
||
import callhub.connect.use_case.email.EmailOutputBoundary; | ||
import callhub.connect.use_case.email.EmailOutputData; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
public class EmailPresenter implements EmailOutputBoundary { | ||
|
||
@Override | ||
public String getResponse(EmailOutputData outputData) { | ||
return outputData.getResponseBody(); | ||
} | ||
} |
81 changes: 0 additions & 81 deletions
81
src/main/java/callhub/connect/use_case/EmailController.java
This file was deleted.
Oops, something went wrong.
14 changes: 14 additions & 0 deletions
14
src/main/java/callhub/connect/use_case/email/EmailDataAccessInterface.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package callhub.connect.use_case.email; | ||
|
||
import org.springframework.stereotype.Component; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.HashMap; | ||
|
||
@Service | ||
public interface EmailDataAccessInterface { | ||
|
||
String getTranscript(String id); | ||
|
||
String getDate(String id); | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/callhub/connect/use_case/email/EmailInputBoundary.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package callhub.connect.use_case.email; | ||
|
||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
public interface EmailInputBoundary { | ||
ResponseEntity<String> getTranscript(EmailInputData inputData); | ||
|
||
ResponseEntity<String> getDate(EmailInputData inputData); | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/callhub/connect/use_case/email/EmailInputData.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package callhub.connect.use_case.email; | ||
|
||
public class EmailInputData { | ||
private final String id; | ||
public EmailInputData(String id) { | ||
this.id = id; | ||
} | ||
public String getId() { | ||
return this.id; | ||
} | ||
} |
53 changes: 53 additions & 0 deletions
53
src/main/java/callhub/connect/use_case/email/EmailInteractor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package callhub.connect.use_case.email; | ||
|
||
import callhub.connect.entities.exceptions.NoMessagesException; | ||
import callhub.connect.entities.exceptions.SessionNotFoundException; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.http.HttpHeaders; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@RestController | ||
public class EmailInteractor implements EmailInputBoundary { | ||
|
||
@Autowired | ||
final EmailDataAccessInterface emailDataAccessObject; | ||
|
||
@Autowired | ||
final EmailOutputBoundary emailPresenter; | ||
|
||
public EmailInteractor(EmailDataAccessInterface emailDataAccessObject, EmailOutputBoundary emailPresenter) { | ||
this.emailDataAccessObject = emailDataAccessObject; | ||
this.emailPresenter = emailPresenter; | ||
} | ||
|
||
@Override | ||
public ResponseEntity<String> getTranscript(EmailInputData inputData) { | ||
HttpHeaders headers = new HttpHeaders(); | ||
try { | ||
String transcript = emailDataAccessObject.getTranscript(inputData.getId()); | ||
EmailOutputData outputData = new EmailOutputData(transcript); | ||
return new ResponseEntity<>(emailPresenter.getResponse(outputData), headers, HttpStatus.OK); | ||
} catch (SessionNotFoundException e) { | ||
return new ResponseEntity<>("This session is inactive or does not exist.", headers, HttpStatus.NOT_FOUND); | ||
} catch (NoMessagesException e) { | ||
return new ResponseEntity<>("This session has no messages.", headers, HttpStatus.NOT_FOUND); | ||
} | ||
} | ||
|
||
|
||
@Override | ||
public ResponseEntity<String> getDate(EmailInputData inputData) { | ||
HttpHeaders headers = new HttpHeaders(); | ||
try { | ||
String date = emailDataAccessObject.getDate(inputData.getId()); | ||
EmailOutputData outputData = new EmailOutputData(date); | ||
return new ResponseEntity<>(emailPresenter.getResponse(outputData), headers, HttpStatus.OK); | ||
} catch (SessionNotFoundException e) { | ||
return new ResponseEntity<>("This session is inactive or does not exist.", headers, HttpStatus.NOT_FOUND); | ||
} catch (NoMessagesException e) { | ||
return new ResponseEntity<>("This session has no messages.", headers, HttpStatus.NOT_FOUND); | ||
} | ||
} | ||
} |
8 changes: 8 additions & 0 deletions
8
src/main/java/callhub/connect/use_case/email/EmailOutputBoundary.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package callhub.connect.use_case.email; | ||
|
||
import org.springframework.stereotype.Service; | ||
|
||
@Service | ||
public interface EmailOutputBoundary { | ||
String getResponse(EmailOutputData outputData); | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/callhub/connect/use_case/email/EmailOutputData.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package callhub.connect.use_case.email; | ||
|
||
public class EmailOutputData { | ||
private final String responseBody; | ||
public EmailOutputData(String responseBody) { | ||
this.responseBody = responseBody; | ||
} | ||
public String getResponseBody() { | ||
return this.responseBody; | ||
} | ||
} |
Oops, something went wrong.