feat: Implemented problem-details for `ChatRoomInactiveException`
authorKai Moritz <kai@juplo.de>
Sat, 16 Mar 2024 19:58:19 +0000 (20:58 +0100)
committerKai Moritz <kai@juplo.de>
Fri, 22 Mar 2024 16:39:20 +0000 (17:39 +0100)
src/main/java/de/juplo/kafka/chat/backend/api/ChatBackendControllerAdvice.java

index 90b639f..6911ba1 100644 (file)
@@ -1,9 +1,6 @@
 package de.juplo.kafka.chat.backend.api;
 
-import de.juplo.kafka.chat.backend.domain.exceptions.InvalidUsernameException;
-import de.juplo.kafka.chat.backend.domain.exceptions.MessageMutationException;
-import de.juplo.kafka.chat.backend.domain.exceptions.ShardNotOwnedException;
-import de.juplo.kafka.chat.backend.domain.exceptions.UnknownChatroomException;
+import de.juplo.kafka.chat.backend.domain.exceptions.*;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ProblemDetail;
@@ -150,4 +147,31 @@ public class ChatBackendControllerAdvice
 
     return problem;
   }
+
+  @ExceptionHandler(ChatRoomInactiveException.class)
+  public final ProblemDetail handleException(
+      ChatRoomInactiveException e,
+      ServerWebExchange exchange,
+      UriComponentsBuilder uriComponentsBuilder)
+  {
+    final HttpStatus status = HttpStatus.SERVICE_UNAVAILABLE;
+    ProblemDetail problem = ProblemDetail.forStatus(status);
+
+    problem.setProperty("timestamp", new Date());
+
+    problem.setProperty("requestId", exchange.getRequest().getId());
+
+    problem.setType(uriComponentsBuilder.replacePath(contextPath).path("/problem/chatroom-inactive").build().toUri());
+
+    StringBuilder stringBuilder = new StringBuilder();
+    stringBuilder.append(status.getReasonPhrase());
+    stringBuilder.append(" - Chat-Room not active");
+    problem.setTitle(stringBuilder.toString());
+
+    problem.setDetail(e.getMessage());
+
+    problem.setProperty("chatroom", e.getChatRoomId());
+
+    return problem;
+  }
 }