X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2Fapi%2FChatBackendControllerAdvice.java;h=90b639ff550d99a8a616d04e2886ce8ca08418d9;hb=df207aa9a8cd349fd43785270d250a7f55593801;hp=ab8c13d4824cd79ce9509144b09f916ef1ce668b;hpb=2e9c772ba87cb848babce496dc3a044f8d5e9ccc;p=demos%2Fkafka%2Fchat diff --git a/src/main/java/de/juplo/kafka/chat/backend/api/ChatBackendControllerAdvice.java b/src/main/java/de/juplo/kafka/chat/backend/api/ChatBackendControllerAdvice.java index ab8c13d4..90b639ff 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/api/ChatBackendControllerAdvice.java +++ b/src/main/java/de/juplo/kafka/chat/backend/api/ChatBackendControllerAdvice.java @@ -1,7 +1,9 @@ package de.juplo.kafka.chat.backend.api; -import de.juplo.kafka.chat.backend.domain.MessageMutationException; -import de.juplo.kafka.chat.backend.domain.UnknownChatroomException; +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 org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ProblemDetail; @@ -45,6 +47,38 @@ public class ChatBackendControllerAdvice problem.setDetail(stringBuilder.toString()); problem.setProperty("chatroomId", e.getChatroomId()); + problem.setProperty("shard", e.getShard()); + problem.setProperty("ownedShards", e.getOwnedShards()); + + return problem; + } + + @ExceptionHandler(ShardNotOwnedException.class) + public final ProblemDetail handleException( + ShardNotOwnedException 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/shard-not-owned").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("Shard not owned: "); + stringBuilder.append(e.getShard()); + problem.setDetail(stringBuilder.toString()); + + problem.setProperty("shard", e.getShard()); return problem; } @@ -77,10 +111,43 @@ public class ChatBackendControllerAdvice stringBuilder.append(" cannot be mutated!"); problem.setDetail(stringBuilder.toString()); - problem.setProperty("mutatedMessage", MessageTo.from(e.getMutated())); - problem.setProperty("existingMessage", MessageTo.from(e.getExisting())); + problem.setProperty("mutatedText", e.getMutatedText()); + + return problem; + } + + @ExceptionHandler(InvalidUsernameException.class) + public final ProblemDetail handleException( + InvalidUsernameException e, + ServerWebExchange exchange, + UriComponentsBuilder uriComponentsBuilder) + { + final HttpStatus status = HttpStatus.BAD_REQUEST; + ProblemDetail problem = ProblemDetail.forStatus(status); + + problem.setProperty("timestamp", new Date()); + + problem.setProperty("requestId", exchange.getRequest().getId()); + + problem.setType(uriComponentsBuilder.replacePath(contextPath).path("/problem/invalid-username").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("Invalid username: "); + stringBuilder.append(e.getUsername()); + stringBuilder.append( + "! A valid username must consist of at at least two letters and " + + "must only contain lower case letters a-z, numbers and dashes"); + problem.setDetail(stringBuilder.toString()); + + problem.setProperty("username", e.getUsername()); + return problem; } }