From 9d0410e5fee455a91e94bede68d1e850b7e345a4 Mon Sep 17 00:00:00 2001 From: Joao Cosme Date: Mon, 17 Nov 2025 11:00:29 -0300 Subject: [PATCH] feat:add last-modified-at for both file and folder --- .../src/main/java/cloudpage/dto/FileDto.java | 1 + .../main/java/cloudpage/dto/FolderDto.java | 7 ++-- .../java/cloudpage/service/FolderService.java | 32 +++++++++++++------ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/backend/src/main/java/cloudpage/dto/FileDto.java b/backend/src/main/java/cloudpage/dto/FileDto.java index cc4c353..4a6df3b 100644 --- a/backend/src/main/java/cloudpage/dto/FileDto.java +++ b/backend/src/main/java/cloudpage/dto/FileDto.java @@ -12,4 +12,5 @@ public class FileDto { private String path; private long size; private String mimeType; + private long lastModifiedAt; } diff --git a/backend/src/main/java/cloudpage/dto/FolderDto.java b/backend/src/main/java/cloudpage/dto/FolderDto.java index f20e502..1d899ac 100644 --- a/backend/src/main/java/cloudpage/dto/FolderDto.java +++ b/backend/src/main/java/cloudpage/dto/FolderDto.java @@ -1,11 +1,11 @@ package cloudpage.dto; +import java.util.List; + import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; -import java.util.List; - @Getter @Setter @AllArgsConstructor @@ -14,4 +14,5 @@ public class FolderDto { private String path; private List folders; private List files; -} \ No newline at end of file + private long lastModifiedAt; +} diff --git a/backend/src/main/java/cloudpage/service/FolderService.java b/backend/src/main/java/cloudpage/service/FolderService.java index 0a19503..0d3a36e 100644 --- a/backend/src/main/java/cloudpage/service/FolderService.java +++ b/backend/src/main/java/cloudpage/service/FolderService.java @@ -1,12 +1,5 @@ package cloudpage.service; -import cloudpage.dto.FileDto; -import cloudpage.dto.FolderDto; -import cloudpage.exceptions.FileDeletionException; -import cloudpage.exceptions.InvalidPathException; -import cloudpage.exceptions.UnauthorizedAccessException; -import org.springframework.stereotype.Service; - import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -16,6 +9,13 @@ import java.util.List; import java.util.stream.Collectors; +import org.springframework.stereotype.Service; + +import cloudpage.dto.FileDto; +import cloudpage.dto.FolderDto; +import cloudpage.exceptions.FileDeletionException; +import cloudpage.exceptions.InvalidPathException; + @Service public class FolderService { @@ -82,7 +82,8 @@ private FolderDto readFolder(Path path) throws IOException { filePath.getFileName().toString(), filePath.toAbsolutePath().toString(), attrs.size(), - Files.probeContentType(filePath) + Files.probeContentType(filePath), + attrs.lastModifiedTime().toMillis() ); } catch (IOException e) { throw new FileDeletionException("Failed to read: " + filePath + "with exception : " + e.getMessage()); @@ -90,7 +91,18 @@ private FolderDto readFolder(Path path) throws IOException { }) .collect(Collectors.toList()); - return new FolderDto(path.getFileName().toString(), path.toAbsolutePath().toString(), subfolders, files); + try { + BasicFileAttributes folderAttrs = Files.readAttributes(path, BasicFileAttributes.class); + return new FolderDto( + path.getFileName().toString(), + path.toAbsolutePath().toString(), + subfolders, + files, + folderAttrs.lastModifiedTime().toMillis() + ); + } catch (IOException e) { + throw new FileDeletionException("Failed to read folder attributes: " + path + " with exception: " + e.getMessage()); + } } public void validatePath(String rootPath, Path path) { @@ -104,4 +116,4 @@ private void validateRoot(Path root) { throw new InvalidPathException("Root folder does not exist or is not a directory: " + root); } } -} \ No newline at end of file +}