Refactor ImageController to use ImageUpdateBodyToSpecConverter.

This commit is contained in:
Jesse Brault 2026-02-03 12:23:03 -06:00
parent 45c71ed0d8
commit 67a4a1339f
2 changed files with 45 additions and 23 deletions

View File

@ -2,8 +2,8 @@ package app.mealsmadeeasy.api.image;
import app.mealsmadeeasy.api.image.body.ImageUpdateBody; import app.mealsmadeeasy.api.image.body.ImageUpdateBody;
import app.mealsmadeeasy.api.image.converter.ImageToViewConverter; 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.ImageCreateSpec;
import app.mealsmadeeasy.api.image.spec.ImageUpdateSpec;
import app.mealsmadeeasy.api.image.view.ImageView; import app.mealsmadeeasy.api.image.view.ImageView;
import app.mealsmadeeasy.api.user.User; import app.mealsmadeeasy.api.user.User;
import app.mealsmadeeasy.api.user.UserService; import app.mealsmadeeasy.api.user.UserService;
@ -32,27 +32,7 @@ public class ImageController {
private final ImageService imageService; private final ImageService imageService;
private final UserService userService; private final UserService userService;
private final ImageToViewConverter imageToViewConverter; private final ImageToViewConverter imageToViewConverter;
private final ImageUpdateBodyToSpecConverter imageUpdateBodyToSpecConverter;
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();
}
@ExceptionHandler @ExceptionHandler
public ResponseEntity<AccessDeniedView> onAccessDenied(AccessDeniedException e) { public ResponseEntity<AccessDeniedView> onAccessDenied(AccessDeniedException e) {
@ -118,7 +98,11 @@ public class ImageController {
) { ) {
final User owner = this.userService.getUser(username); final User owner = this.userService.getUser(username);
final Image image = this.imageService.getByOwnerAndFilename(owner, filename, principal); 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)); return ResponseEntity.ok(this.imageToViewConverter.convert(updated, principal, true));
} }

View File

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