From 7df791f9b8bcf15a82841e28d9dafb28a1f885aa Mon Sep 17 00:00:00 2001 From: vladp Date: Mon, 13 Apr 2026 19:19:34 +0700 Subject: [PATCH] dev change sort user all files --- .../nocopy/handler/FileEntityHandler.java | 94 ++++++++++++++++--- 1 file changed, 79 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java b/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java index 3dcefd2..40cb18a 100644 --- a/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java +++ b/src/main/java/ru/soune/nocopy/handler/FileEntityHandler.java @@ -228,33 +228,97 @@ public class FileEntityHandler implements RequestHandler { Map.of("file_status", newStatus, "file_id", fileId)); } +// private BaseResponse handleSearchFiles(BaseRequest request, FileEntityRequest fileRequest) { +// try { +// Long userId = authService.useUserAuthToken(fileRequest.getToken()); +// int page = fileRequest.getPage() != null ? fileRequest.getPage() : 1; +// int pageSize = fileRequest.getPageSize() != null ? fileRequest.getPageSize() : 20; +// String fileRequestSortBy = fileRequest.getSortBy(); +// String sortBy = !fileRequestSortBy.equals("") ? fileRequest.getSortBy(): "createdAt"; +// sortBy = sortBy.equals("fileName") ? "originalFileName" : sortBy; +// +// String sortOrder = fileRequest.getSortOrder(); +// Sort.Direction direction = (sortOrder != null && sortOrder.equalsIgnoreCase("desc")) +// ? Sort.Direction.DESC +// : Sort.Direction.ASC; +// Sort sort = Sort.by(direction, sortBy); +// +// Pageable pageable = PageRequest.of(page, pageSize, sort); +// FileResponse userFiles = fileEntityService.getUserFiles(userId, pageable, request.getVersion()); +// +// FileListResponse response = FileListResponse.builder() +// .files(userFiles.getFiles()) +// .totalCount(userFiles.getTotalCount()) +// .totalSize(userFiles.getTotalSize()) +// .formattedTotalSize(fileEntityService.formatFileSize(userFiles.getTotalSize())) +// .page(page) +// .pageSize(pageSize) +// .sortBy(sortBy) +// .sortOrder(sortOrder) +// .build(); +// +// return new BaseResponse(request.getMsgId(), +// MessageCode.SUCCESS.getCode(), +// MessageCode.SUCCESS.getDescription(), +// response); +// +// } catch (NotFoundAuthToken e) { +// return new BaseResponse(request.getMsgId(), +// MessageCode.INVALID_TOKEN.getCode(), +// "Authentication required", null); +// } catch (Exception e) { +// log.error("Error searching files", e); +// return new BaseResponse(request.getMsgId(), +// MessageCode.FILE_UPLOAD_ERROR.getCode(), +// "Failed to search files: " + e.getMessage(), null); +// } +// } + private BaseResponse handleSearchFiles(BaseRequest request, FileEntityRequest fileRequest) { try { Long userId = authService.useUserAuthToken(fileRequest.getToken()); int page = fileRequest.getPage() != null ? fileRequest.getPage() : 1; int pageSize = fileRequest.getPageSize() != null ? fileRequest.getPageSize() : 20; - String fileRequestSortBy = fileRequest.getSortBy(); - String sortBy = !fileRequestSortBy.equals("") ? fileRequest.getSortBy(): "createdAt"; - sortBy = sortBy.equals("fileName") ? "originalFileName" : sortBy; - String sortOrder = fileRequest.getSortOrder(); - Sort.Direction direction = (sortOrder != null && sortOrder.equalsIgnoreCase("desc")) - ? Sort.Direction.DESC - : Sort.Direction.ASC; - Sort sort = Sort.by(direction, sortBy); + String sortBy = fileRequest.getSortBy() != null ? fileRequest.getSortBy() : "fileName"; + SortOrder sortOrder = SortOrder.fromString(fileRequest.getSortOrder()); - Pageable pageable = PageRequest.of(page, pageSize, sort); - FileResponse userFiles = fileEntityService.getUserFiles(userId, pageable, request.getVersion()); + FileResponse allFiles = fileEntityService.getUserFiles(userId, 1, 1000, request.getVersion()); + + String searchQuery = fileRequest.getQuery() != null ? fileRequest.getQuery().toLowerCase().trim() : ""; + String[] searchTerms = searchQuery.split("\\s+"); + String filterType = fileRequest.getType(); + String dateFilter = fileRequest.getDateFilter(); + + List filteredFiles = allFiles.getFiles().stream() + .filter(f -> matchesSearch(f, searchTerms, searchQuery, filterType)) + .filter(f -> matchesDateFilter(f, dateFilter)) + .collect(Collectors.toList()); + + Comparator comparator = getComparator(sortBy, sortOrder); + filteredFiles.sort(comparator); + + int start = (page - 1) * pageSize; + int end = Math.min(start + pageSize, filteredFiles.size()); + + if (start >= filteredFiles.size()) { + return createEmptyResponse(request, page, pageSize, sortBy, sortOrder.getValue()); + } + + List paginatedFiles = filteredFiles.subList(start, end); + long totalSize = paginatedFiles.stream() + .mapToLong(FileEntityResponse::getFileSize) + .sum(); FileListResponse response = FileListResponse.builder() - .files(userFiles.getFiles()) - .totalCount(userFiles.getTotalCount()) - .totalSize(userFiles.getTotalSize()) - .formattedTotalSize(fileEntityService.formatFileSize(userFiles.getTotalSize())) + .files(paginatedFiles) + .totalCount(filteredFiles.size()) + .totalSize(totalSize) + .formattedTotalSize(fileEntityService.formatFileSize(totalSize)) .page(page) .pageSize(pageSize) .sortBy(sortBy) - .sortOrder(sortOrder) + .sortOrder(sortOrder.getValue()) .build(); return new BaseResponse(request.getMsgId(),