From 2e0968edc21a19fb41175165a70e4a14d073cfd6 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Wed, 29 Jul 2026 18:35:41 +0200 Subject: [PATCH 1/2] feat: findImageByID function --- README.md | 2 +- .../taglens/repository/ImageRepository.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d80e359..bcf72fb 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ - `POST /images/upload` Upload image +- `GET /images/{id}` Get image link - `GET /images/my` My uploaded images - `GET /images` Home / search images **_Public_** -- `GET /images/{id}/content` Display image **_Public_** - `DELETE /images/{id}` Delete my image \ No newline at end of file diff --git a/src/main/java/dev/barboud/taglens/repository/ImageRepository.java b/src/main/java/dev/barboud/taglens/repository/ImageRepository.java index 3faa835..ef9ceda 100644 --- a/src/main/java/dev/barboud/taglens/repository/ImageRepository.java +++ b/src/main/java/dev/barboud/taglens/repository/ImageRepository.java @@ -5,6 +5,10 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + @Repository @RequiredArgsConstructor public class ImageRepository { @@ -26,4 +30,26 @@ public void saveImage(Image image) { image.getFileSize() ); } + + public Optional findImageById(UUID imageId) { + String sql = """ + SELECT id, user_id, storage_key, content_type, file_size, created_at + FROM images + WHERE id = ? + """; + + List results = jdbcTemplate.query(sql, (rs, rowNum) -> { + Image image = new Image(); + image.setId(UUID.fromString(rs.getString("id"))); + image.setUserId(UUID.fromString(rs.getString("user_id"))); + image.setStorageKey(rs.getString("storage_key")); + image.setContentType(rs.getString("content_type")); + image.setFileSize(rs.getLong("file_size")); + image.setCreatedAt(rs.getTimestamp("created_at").toInstant()); + return image; + }, imageId); + + return results.stream().findFirst(); + } + } \ No newline at end of file From 01860bd1ac277c67fbbbc598e34c806efeb7e717 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Wed, 29 Jul 2026 18:47:14 +0200 Subject: [PATCH 2/2] feat: get image link --- .../taglens/controller/ImageController.java | 15 +++++++++++---- .../barboud/taglens/service/ImageService.java | 19 +++++++++++++++++-- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/dev/barboud/taglens/controller/ImageController.java b/src/main/java/dev/barboud/taglens/controller/ImageController.java index 1688ba7..7cbb973 100644 --- a/src/main/java/dev/barboud/taglens/controller/ImageController.java +++ b/src/main/java/dev/barboud/taglens/controller/ImageController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.util.Map; import java.util.UUID; @RestController @@ -33,10 +34,16 @@ public ResponseEntity uploadImage( .body(imageResponseDto); } -// @GetMapping("/link") -// public ResponseEntity> getImageLink(@RequestParam String key) { -// return ResponseEntity.ok(Map.of("url", imageService.getImageLink(key, 15))); -// } + @GetMapping("/{id}") + public ResponseEntity> getImageLink( + @PathVariable UUID id, + @CookieValue("session_id") UUID sessionId + ) { + String url = imageService.getImageLink(id, sessionId); + return ResponseEntity.ok(Map.of("url", url)); + } + + // // @DeleteMapping // public ResponseEntity deleteImage(@RequestParam String key) { diff --git a/src/main/java/dev/barboud/taglens/service/ImageService.java b/src/main/java/dev/barboud/taglens/service/ImageService.java index 54d4530..f42bd5b 100644 --- a/src/main/java/dev/barboud/taglens/service/ImageService.java +++ b/src/main/java/dev/barboud/taglens/service/ImageService.java @@ -18,7 +18,7 @@ public class ImageService { private final SessionRepository sessionRepository; private final ImageRepository imageRepository; - private final StorageService fileService; + private final StorageService storageService; private static final long MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB @@ -52,7 +52,7 @@ public ImageResponseDto uploadImage( // 5. Upload image to Object Storage String storageKey = - fileService.upload(file); + storageService.upload(file); // 6. Create Image object Image image = new Image(); @@ -73,4 +73,19 @@ public ImageResponseDto uploadImage( image.getStorageKey() ); } + + + public String getImageLink(UUID imageId, UUID sessionId) { + Session session = sessionRepository.findValidSession(sessionId) + .orElseThrow(() -> new RuntimeException("Unauthorized")); + + Image image = imageRepository.findImageById(imageId) + .orElseThrow(() -> new RuntimeException("Not found")); + + if (!image.getUserId().equals(session.getUserId())) { + throw new RuntimeException("Not found"); + } + + return storageService.getLink(image.getStorageKey(), 15); + } }