Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/dev/barboud/taglens/controller/ImageController.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,14 @@ public ResponseEntity<List<ImageResponseDto>> getMyImages(
return ResponseEntity.ok(imageResponseDto);
}

@GetMapping
public List<ImageResponseDto> browseImages(
@RequestParam(value = "search", required = false) String search
) {
if (search != null && !search.isBlank()) {
return imageService.searchImages(search);
}
return imageService.getRecentImages();
}

}
45 changes: 45 additions & 0 deletions src/main/java/dev/barboud/taglens/repository/ImageRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,4 +100,49 @@ public void updateImageTags(UUID imageId, Map<String, Object> tags) {
);
}

public List<Image> 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<Image> 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);
}

}
29 changes: 29 additions & 0 deletions src/main/java/dev/barboud/taglens/service/ImageService.java
Original file line number Diff line number Diff line change
Expand Up @@ -118,4 +118,33 @@ public List<ImageResponseDto> getMyImages(UUID sessionId){
.toList();

}

public List<ImageResponseDto> getRecentImages() {
List<Image> images = imageRepository.findRecentImages();

return images.stream()
.map(image -> new ImageResponseDto(
image.getId(),
image.getContentType(),
image.getFileSize(),
image.getStorageKey(),
image.getTags()
))
.toList();
}

public List<ImageResponseDto> searchImages(String search) {
List<Image> images = imageRepository.findImageBySearchQuery(search);

return images.stream()
.map(image -> new ImageResponseDto(
image.getId(),
image.getContentType(),
image.getFileSize(),
image.getStorageKey(),
image.getTags()
))
.toList();
}

}