From 3b58de40dbf713d6f8a67b25d5db779686c55c55 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Tue, 4 Aug 2026 18:13:11 +0200 Subject: [PATCH 1/2] feat: find images for home pages and by search --- .../taglens/configuration/SecurityConfig.java | 1 + .../taglens/repository/ImageRepository.java | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/main/java/dev/barboud/taglens/configuration/SecurityConfig.java b/src/main/java/dev/barboud/taglens/configuration/SecurityConfig.java index ebb3a05..df987ec 100644 --- a/src/main/java/dev/barboud/taglens/configuration/SecurityConfig.java +++ b/src/main/java/dev/barboud/taglens/configuration/SecurityConfig.java @@ -23,6 +23,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .requestMatchers("/auth/login", "/auth/register").permitAll() // login & register: public .requestMatchers("/", "/*.html", "/*.css", "/*.js").permitAll() .requestMatchers("/actuator/**").permitAll() + .requestMatchers("/images").permitAll() .anyRequest().authenticated() // everything else: must be logged in ) .addFilterBefore(sessionAuthFilter, UsernamePasswordAuthenticationFilter.class); diff --git a/src/main/java/dev/barboud/taglens/repository/ImageRepository.java b/src/main/java/dev/barboud/taglens/repository/ImageRepository.java index 7788d5d..8c4054c 100644 --- a/src/main/java/dev/barboud/taglens/repository/ImageRepository.java +++ b/src/main/java/dev/barboud/taglens/repository/ImageRepository.java @@ -100,4 +100,49 @@ public void updateImageTags(UUID imageId, Map tags) { ); } + public List findRecentImages() { + String sql = """ + SELECT id, user_id, storage_key, content_type, file_size, created_at, tags + FROM images + ORDER BY created_at DESC + LIMIT 50 + """; + + return 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()); + image.setTags(parseTags(rs.getString("tags"))); + return image; + }); + } + + public List findImageBySearchQuery(String search) { + String sql = """ + SELECT id, user_id, storage_key, content_type, file_size, created_at, tags + FROM images + WHERE tags::text ILIKE ? + ORDER BY created_at DESC + LIMIT 50 + """; + + String pattern = "%" + search + "%"; + + return 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()); + image.setTags(parseTags(rs.getString("tags"))); + return image; + }, pattern); + } + } \ No newline at end of file From e0e560a7ec3a1d97858edee619d2bab404b6ffe1 Mon Sep 17 00:00:00 2001 From: Salem Ba-Rabuod Date: Tue, 4 Aug 2026 18:13:58 +0200 Subject: [PATCH 2/2] feat: Endpoind /images to view and search --- .../taglens/controller/ImageController.java | 10 +++++++ .../barboud/taglens/service/ImageService.java | 29 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/main/java/dev/barboud/taglens/controller/ImageController.java b/src/main/java/dev/barboud/taglens/controller/ImageController.java index 0912d85..ec08962 100644 --- a/src/main/java/dev/barboud/taglens/controller/ImageController.java +++ b/src/main/java/dev/barboud/taglens/controller/ImageController.java @@ -59,4 +59,14 @@ public ResponseEntity> getMyImages( return ResponseEntity.ok(imageResponseDto); } + @GetMapping + public List browseImages( + @RequestParam(value = "search", required = false) String search + ) { + if (search != null && !search.isBlank()) { + return imageService.searchImages(search); + } + return imageService.getRecentImages(); + } + } diff --git a/src/main/java/dev/barboud/taglens/service/ImageService.java b/src/main/java/dev/barboud/taglens/service/ImageService.java index 14c3405..5a87f5c 100644 --- a/src/main/java/dev/barboud/taglens/service/ImageService.java +++ b/src/main/java/dev/barboud/taglens/service/ImageService.java @@ -118,4 +118,33 @@ public List getMyImages(UUID sessionId){ .toList(); } + + public List getRecentImages() { + List images = imageRepository.findRecentImages(); + + return images.stream() + .map(image -> new ImageResponseDto( + image.getId(), + image.getContentType(), + image.getFileSize(), + image.getStorageKey(), + image.getTags() + )) + .toList(); + } + + public List searchImages(String search) { + List images = imageRepository.findImageBySearchQuery(search); + + return images.stream() + .map(image -> new ImageResponseDto( + image.getId(), + image.getContentType(), + image.getFileSize(), + image.getStorageKey(), + image.getTags() + )) + .toList(); + } + }