Add 404 response if no any publication was found while searching publications.

This commit is contained in:
Florian THIERRY
2024-03-15 22:33:14 +01:00
parent dabd93091c
commit 8d778e3571
4 changed files with 22 additions and 3 deletions

View File

@@ -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.");
}
}

View File

@@ -13,6 +13,7 @@ import org.codiki.domain.exception.RefreshTokenExpiredException;
import org.codiki.domain.exception.UserDoesNotExistException; import org.codiki.domain.exception.UserDoesNotExistException;
import org.codiki.domain.picture.exception.PictureNotFoundException; import org.codiki.domain.picture.exception.PictureNotFoundException;
import org.codiki.domain.picture.exception.PictureUploadException; 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.PublicationEditionException;
import org.codiki.domain.publication.exception.PublicationNotFoundException; import org.codiki.domain.publication.exception.PublicationNotFoundException;
import org.codiki.domain.publication.exception.PublicationUpdateForbiddenException; import org.codiki.domain.publication.exception.PublicationUpdateForbiddenException;
@@ -44,7 +45,8 @@ public class GlobalControllerExceptionHandler extends ResponseEntityExceptionHan
UserDoesNotExistException.class, UserDoesNotExistException.class,
RefreshTokenDoesNotExistException.class, RefreshTokenDoesNotExistException.class,
PublicationNotFoundException.class, PublicationNotFoundException.class,
PictureNotFoundException.class PictureNotFoundException.class,
NoPublicationSearchResultException.class
}) })
public ProblemDetail handleNotFoundExceptions(Exception exception) { public ProblemDetail handleNotFoundExceptions(Exception exception) {
return buildProblemDetail(NOT_FOUND, exception); return buildProblemDetail(NOT_FOUND, exception);

View File

@@ -5,7 +5,9 @@ import java.util.UUID;
import static org.springframework.http.HttpStatus.CREATED; import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.NO_CONTENT; import static org.springframework.http.HttpStatus.NO_CONTENT;
import static org.springframework.util.ObjectUtils.isEmpty;
import org.codiki.application.publication.PublicationUseCases; 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.exception.PublicationNotFoundException;
import org.codiki.domain.publication.model.Publication; import org.codiki.domain.publication.model.Publication;
import org.codiki.domain.publication.model.PublicationEditionRequest; import org.codiki.domain.publication.model.PublicationEditionRequest;
@@ -64,9 +66,15 @@ public class PublicationController {
@GetMapping @GetMapping
public List<PublicationDto> searchPublications(@RequestParam("query") String searchQuery) { public List<PublicationDto> searchPublications(@RequestParam("query") String searchQuery) {
return publicationUseCases.searchPublications(searchQuery) final List<PublicationDto> publications = publicationUseCases.searchPublications(searchQuery)
.stream() .stream()
.map(PublicationDto::new) .map(PublicationDto::new)
.toList(); .toList();
if (isEmpty(publications)) {
throw new NoPublicationSearchResultException();
}
return publications;
} }
} }

View File

@@ -1,7 +1,7 @@
vars { vars {
url: http://localhost:8080 url: http://localhost:8080
publicationId: e23831a6-9cc0-4f3d-9efa-7a1cae191cb1 publicationId: e23831a6-9cc0-4f3d-9efa-7a1cae191cb1
bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1YWQ0NjJiOC04ZjllLTRhMjYtYmI4Ni1jNzRmZWY1ZDExYjYiLCJleHAiOjE3MTA1MjY1MDh9.DvfA5uxPMjydRaAkocimAHGo9bfJmTu7hEBIKlaMBd7Qu4XFD1OSL58u8VHnFBU2EiBitRtJRUdidERphkww0Q bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1YWQ0NjJiOC04ZjllLTRhMjYtYmI4Ni1jNzRmZWY1ZDExYjYiLCJleHAiOjE3MTA1MzkzMjd9.qskbb1_AKlY74GmcDHVzFV7wGP7nDPk1St8OlUmTy08ut4SWRvi0WnrD90Y1cBAnsiu2UTjV5v6LXkX5W_pLfg
categoryId: 172fa901-3f4b-4540-92f3-1c15820e8ec9 categoryId: 172fa901-3f4b-4540-92f3-1c15820e8ec9
pictureId: 65b660b7-66bb-4e4a-a62c-fd0ca101f972 pictureId: 65b660b7-66bb-4e4a-a62c-fd0ca101f972
} }