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 +}