refactor: `UnknownChatroomException` is a business-exception - Relocate
[demos/kafka/chat] / src / main / java / de / juplo / kafka / chat / backend / api / ChatBackendControllerAdvice.java
index 42f7599..ab8c13d 100644 (file)
@@ -1,6 +1,7 @@
-package de.juplo.kafka.chatroom.api;
+package de.juplo.kafka.chat.backend.api;
 
-import de.juplo.kafka.chatroom.domain.MessageMutationException;
+import de.juplo.kafka.chat.backend.domain.MessageMutationException;
+import de.juplo.kafka.chat.backend.domain.UnknownChatroomException;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ProblemDetail;
@@ -13,11 +14,41 @@ import java.util.Date;
 
 
 @ControllerAdvice
-public class ChatroomControllerAdvice
+public class ChatBackendControllerAdvice
 {
   @Value("${server.context-path:/}")
   String contextPath;
 
+  @ExceptionHandler(UnknownChatroomException.class)
+  public final ProblemDetail handleException(
+      UnknownChatroomException e,
+      ServerWebExchange exchange,
+      UriComponentsBuilder uriComponentsBuilder)
+  {
+    final HttpStatus status = HttpStatus.NOT_FOUND;
+    ProblemDetail problem = ProblemDetail.forStatus(status);
+
+    problem.setProperty("timestamp", new Date());
+
+    problem.setProperty("requestId", exchange.getRequest().getId());
+
+    problem.setType(uriComponentsBuilder.replacePath(contextPath).path("/problem/unknown-chatroom").build().toUri());
+    StringBuilder stringBuilder = new StringBuilder();
+    stringBuilder.append(status.getReasonPhrase());
+    stringBuilder.append(" - ");
+    stringBuilder.append(e.getMessage());
+    problem.setTitle(stringBuilder.toString());
+
+    stringBuilder.setLength(0);
+    stringBuilder.append("Chatroom unknown: ");
+    stringBuilder.append(e.getChatroomId());
+    problem.setDetail(stringBuilder.toString());
+
+    problem.setProperty("chatroomId", e.getChatroomId());
+
+    return problem;
+  }
+
   @ExceptionHandler(MessageMutationException.class)
   public final ProblemDetail handleException(
       MessageMutationException e,
@@ -40,15 +71,15 @@ public class ChatroomControllerAdvice
 
     stringBuilder.setLength(0);
     stringBuilder.append("The existing message with user=");
-    stringBuilder.append(e.getExisting().getUser());
+    stringBuilder.append(e.getExisting().getUsername());
     stringBuilder.append(" and id=");
     stringBuilder.append(e.getExisting().getId());
     stringBuilder.append(" cannot be mutated!");
     problem.setDetail(stringBuilder.toString());
 
-    problem.setProperty("mutatedMessage", e.getMutated());
+    problem.setProperty("mutatedMessage", MessageTo.from(e.getMutated()));
 
-    problem.setProperty("existingMessage", e.getExisting());
+    problem.setProperty("existingMessage", MessageTo.from(e.getExisting()));
 
     return problem;
   }