From 67a4a1339f0e400b88cf2e5223d74253060d8ac5 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Tue, 3 Feb 2026 12:23:03 -0600 Subject: [PATCH] Refactor ImageController to use ImageUpdateBodyToSpecConverter. --- .../api/image/ImageController.java | 30 ++++----------- .../ImageUpdateBodyToSpecConverter.java | 38 +++++++++++++++++++ 2 files changed, 45 insertions(+), 23 deletions(-) create mode 100644 src/main/java/app/mealsmadeeasy/api/image/converter/ImageUpdateBodyToSpecConverter.java diff --git a/src/main/java/app/mealsmadeeasy/api/image/ImageController.java b/src/main/java/app/mealsmadeeasy/api/image/ImageController.java index c426402..d0e15c7 100644 --- a/src/main/java/app/mealsmadeeasy/api/image/ImageController.java +++ b/src/main/java/app/mealsmadeeasy/api/image/ImageController.java @@ -2,8 +2,8 @@ package app.mealsmadeeasy.api.image; import app.mealsmadeeasy.api.image.body.ImageUpdateBody; import app.mealsmadeeasy.api.image.converter.ImageToViewConverter; +import app.mealsmadeeasy.api.image.converter.ImageUpdateBodyToSpecConverter; import app.mealsmadeeasy.api.image.spec.ImageCreateSpec; -import app.mealsmadeeasy.api.image.spec.ImageUpdateSpec; import app.mealsmadeeasy.api.image.view.ImageView; import app.mealsmadeeasy.api.user.User; import app.mealsmadeeasy.api.user.UserService; @@ -32,27 +32,7 @@ public class ImageController { private final ImageService imageService; private final UserService userService; private final ImageToViewConverter imageToViewConverter; - - private ImageUpdateSpec getImageUpdateSpec(ImageUpdateBody body) { - final var builder = ImageUpdateSpec.builder() - .alt(body.getAlt()) - .caption(body.getCaption()) - .isPublic(body.getIsPublic()) - .clearAllViewers(body.getClearAllViewers()); - if (body.getViewersToAdd() != null) { - builder.viewersToAdd(body.getViewersToAdd().stream() - .map(this.userService::getUser) - .collect(Collectors.toSet()) - ); - } - if (body.getViewersToRemove() != null) { - builder.viewersToRemove(body.getViewersToRemove().stream() - .map(this.userService::getUser) - .collect(Collectors.toSet()) - ); - } - return builder.build(); - } + private final ImageUpdateBodyToSpecConverter imageUpdateBodyToSpecConverter; @ExceptionHandler public ResponseEntity onAccessDenied(AccessDeniedException e) { @@ -118,7 +98,11 @@ public class ImageController { ) { final User owner = this.userService.getUser(username); final Image image = this.imageService.getByOwnerAndFilename(owner, filename, principal); - final Image updated = this.imageService.update(image, principal, this.getImageUpdateSpec(body)); + final Image updated = this.imageService.update( + image, + principal, + this.imageUpdateBodyToSpecConverter.convert(body) + ); return ResponseEntity.ok(this.imageToViewConverter.convert(updated, principal, true)); } diff --git a/src/main/java/app/mealsmadeeasy/api/image/converter/ImageUpdateBodyToSpecConverter.java b/src/main/java/app/mealsmadeeasy/api/image/converter/ImageUpdateBodyToSpecConverter.java new file mode 100644 index 0000000..fe70e07 --- /dev/null +++ b/src/main/java/app/mealsmadeeasy/api/image/converter/ImageUpdateBodyToSpecConverter.java @@ -0,0 +1,38 @@ +package app.mealsmadeeasy.api.image.converter; + +import app.mealsmadeeasy.api.image.body.ImageUpdateBody; +import app.mealsmadeeasy.api.image.spec.ImageUpdateSpec; +import app.mealsmadeeasy.api.user.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.stream.Collectors; + +@Component +@RequiredArgsConstructor +public class ImageUpdateBodyToSpecConverter { + + private final UserService userService; + + public ImageUpdateSpec convert(ImageUpdateBody body) { + final var builder = ImageUpdateSpec.builder() + .alt(body.getAlt()) + .caption(body.getCaption()) + .isPublic(body.getIsPublic()) + .clearAllViewers(body.getClearAllViewers()); + if (body.getViewersToAdd() != null) { + builder.viewersToAdd(body.getViewersToAdd().stream() + .map(this.userService::getUser) + .collect(Collectors.toSet()) + ); + } + if (body.getViewersToRemove() != null) { + builder.viewersToRemove(body.getViewersToRemove().stream() + .map(this.userService::getUser) + .collect(Collectors.toSet()) + ); + } + return builder.build(); + } + +}