diff --git a/codiki-domain/src/main/java/org/codiki/domain/publication/exception/NoPublicationSearchResultException.java b/codiki-domain/src/main/java/org/codiki/domain/publication/exception/NoPublicationSearchResultException.java new file mode 100644 index 0000000..223778f --- /dev/null +++ b/codiki-domain/src/main/java/org/codiki/domain/publication/exception/NoPublicationSearchResultException.java @@ -0,0 +1,9 @@ +package org.codiki.domain.publication.exception; + +import org.codiki.domain.exception.FunctionnalException; + +public class NoPublicationSearchResultException extends FunctionnalException { + public NoPublicationSearchResultException() { + super("No any publication was found for search criteria."); + } +} diff --git a/codiki-exposition/src/main/java/org/codiki/exposition/configuration/GlobalControllerExceptionHandler.java b/codiki-exposition/src/main/java/org/codiki/exposition/configuration/GlobalControllerExceptionHandler.java index 5bcc3f8..5612152 100644 --- a/codiki-exposition/src/main/java/org/codiki/exposition/configuration/GlobalControllerExceptionHandler.java +++ b/codiki-exposition/src/main/java/org/codiki/exposition/configuration/GlobalControllerExceptionHandler.java @@ -13,6 +13,7 @@ import org.codiki.domain.exception.RefreshTokenExpiredException; import org.codiki.domain.exception.UserDoesNotExistException; import org.codiki.domain.picture.exception.PictureNotFoundException; import org.codiki.domain.picture.exception.PictureUploadException; +import org.codiki.domain.publication.exception.NoPublicationSearchResultException; import org.codiki.domain.publication.exception.PublicationEditionException; import org.codiki.domain.publication.exception.PublicationNotFoundException; import org.codiki.domain.publication.exception.PublicationUpdateForbiddenException; @@ -44,7 +45,8 @@ public class GlobalControllerExceptionHandler extends ResponseEntityExceptionHan UserDoesNotExistException.class, RefreshTokenDoesNotExistException.class, PublicationNotFoundException.class, - PictureNotFoundException.class + PictureNotFoundException.class, + NoPublicationSearchResultException.class }) public ProblemDetail handleNotFoundExceptions(Exception exception) { return buildProblemDetail(NOT_FOUND, exception); diff --git a/codiki-exposition/src/main/java/org/codiki/exposition/publication/PublicationController.java b/codiki-exposition/src/main/java/org/codiki/exposition/publication/PublicationController.java index b874143..4f411ee 100644 --- a/codiki-exposition/src/main/java/org/codiki/exposition/publication/PublicationController.java +++ b/codiki-exposition/src/main/java/org/codiki/exposition/publication/PublicationController.java @@ -5,7 +5,9 @@ import java.util.UUID; import static org.springframework.http.HttpStatus.CREATED; import static org.springframework.http.HttpStatus.NO_CONTENT; +import static org.springframework.util.ObjectUtils.isEmpty; import org.codiki.application.publication.PublicationUseCases; +import org.codiki.domain.publication.exception.NoPublicationSearchResultException; import org.codiki.domain.publication.exception.PublicationNotFoundException; import org.codiki.domain.publication.model.Publication; import org.codiki.domain.publication.model.PublicationEditionRequest; @@ -64,9 +66,15 @@ public class PublicationController { @GetMapping public List searchPublications(@RequestParam("query") String searchQuery) { - return publicationUseCases.searchPublications(searchQuery) + final List publications = publicationUseCases.searchPublications(searchQuery) .stream() .map(PublicationDto::new) .toList(); + + if (isEmpty(publications)) { + throw new NoPublicationSearchResultException(); + } + + return publications; } } diff --git a/rest-client-collection/Codiki/environments/localhost.bru b/rest-client-collection/Codiki/environments/localhost.bru index 55e10e9..36381ed 100644 --- a/rest-client-collection/Codiki/environments/localhost.bru +++ b/rest-client-collection/Codiki/environments/localhost.bru @@ -1,7 +1,7 @@ vars { url: http://localhost:8080 publicationId: e23831a6-9cc0-4f3d-9efa-7a1cae191cb1 - bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1YWQ0NjJiOC04ZjllLTRhMjYtYmI4Ni1jNzRmZWY1ZDExYjYiLCJleHAiOjE3MTA1MjY1MDh9.DvfA5uxPMjydRaAkocimAHGo9bfJmTu7hEBIKlaMBd7Qu4XFD1OSL58u8VHnFBU2EiBitRtJRUdidERphkww0Q + bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1YWQ0NjJiOC04ZjllLTRhMjYtYmI4Ni1jNzRmZWY1ZDExYjYiLCJleHAiOjE3MTA1MzkzMjd9.qskbb1_AKlY74GmcDHVzFV7wGP7nDPk1St8OlUmTy08ut4SWRvi0WnrD90Y1cBAnsiu2UTjV5v6LXkX5W_pLfg categoryId: 172fa901-3f4b-4540-92f3-1c15820e8ec9 pictureId: 65b660b7-66bb-4e4a-a62c-fd0ca101f972 }