Merge branch 'dev' into NCBACK-35

# Conflicts:
#	src/main/java/ru/soune/nocopy/controller/ApiController.java
#	src/main/java/ru/soune/nocopy/repository/FileEntityRepository.java
#	src/main/java/ru/soune/nocopy/service/file/impl/FileUploadServiceImpl.java
This commit is contained in:
vladp
2026-04-16 16:25:36 +07:00
114 changed files with 3982 additions and 160 deletions
@@ -4,6 +4,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Component;
import ru.soune.nocopy.dto.*;
import ru.soune.nocopy.dto.file.*;
@@ -225,9 +228,55 @@ public class FileEntityHandler implements RequestHandler {
return new BaseResponse(request.getMsgId(),
MessageCode.SUCCESS.getCode(),
MessageCode.SUCCESS.getDescription(),
FileEntityResponse.builder().status(newStatus).build());
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());
@@ -292,6 +341,73 @@ public class FileEntityHandler implements RequestHandler {
}
}
/**
*
* 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 sortBy = fileRequest.getSortBy() != null ? fileRequest.getSortBy() : "fileName";
* SortOrder sortOrder = SortOrder.fromString(fileRequest.getSortOrder());
*
* 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<FileEntityResponse> filteredFiles = allFiles.getFiles().stream()
* .filter(f -> matchesSearch(f, searchTerms, searchQuery, filterType))
* .filter(f -> matchesDateFilter(f, dateFilter))
* .collect(Collectors.toList());
*
* Comparator<FileEntityResponse> 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<FileEntityResponse> paginatedFiles = filteredFiles.subList(start, end);
* long totalSize = paginatedFiles.stream()
* .mapToLong(FileEntityResponse::getFileSize)
* .sum();
*
* FileListResponse response = FileListResponse.builder()
* .files(paginatedFiles)
* .totalCount(filteredFiles.size())
* .totalSize(totalSize)
* .formattedTotalSize(fileEntityService.formatFileSize(totalSize))
* .page(page)
* .pageSize(pageSize)
* .sortBy(sortBy)
* .sortOrder(sortOrder.getValue())
* .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 boolean matchesDateFilter(FileEntityResponse file, String dateFilter) {
if (dateFilter == null || dateFilter.isEmpty()) {
return true;
@@ -423,6 +539,12 @@ public class FileEntityHandler implements RequestHandler {
Comparator.nullsLast(Comparator.naturalOrder())
);
break;
case "monitoring":
comparator = Comparator.comparing(
FileEntityResponse::getMonitoring,
Comparator.nullsLast(Comparator.naturalOrder())
);
break;
default:
comparator = Comparator.comparing(