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
@@ -3,6 +3,8 @@ package ru.soune.nocopy.service.file;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ru.soune.nocopy.dto.file.FileEntityResponse;
@@ -81,17 +83,61 @@ public class FileEntityService {
for (Long uId : userRepository.findByCompanyId(user.getCompany().getId()).stream()
.map(User::getId)
.toList()) {
allFiles.addAll(fileEntityRepository.findByUserIdAndStatusIn(uId,
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION)));
allFiles.addAll(getAllUserFiles(uId, List.of(FileStatus.ACTIVE, FileStatus.BLOCKED,
FileStatus.MODERATION)));
}
} else {
allFiles = fileEntityRepository.findByUserIdAndStatusIn(userId,
List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION));
allFiles = getAllUserFiles(userId, List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION));
}
return allFiles;
}
public List<FileEntity> getAllUserFiles(Long userId, List<FileStatus> statuses) {
User user = userRepository.findById(userId).orElseThrow();
List<FileEntity> allFiles = new ArrayList<>();
if (user.getCompany() != null) {
for (Long uId : userRepository.findByCompanyId(user.getCompany().getId()).stream()
.map(User::getId)
.toList()) {
allFiles.addAll(fileEntityRepository.findByUserIdAndStatusIn(uId, statuses));
}
} else {
allFiles = fileEntityRepository.findByUserIdAndStatusIn(userId, statuses);
}
return allFiles;
}
@Transactional(readOnly = true)
public FileResponse getUserFiles(Long userId, Pageable pageable, int version) {
User user = userRepository.findById(userId).orElseThrow();
List<User> users = user.getCompany() != null ?
userRepository.findByCompanyId(user.getCompany().getId()) : List.of(user);
List<FileStatus> statusesForSearch = List.of(FileStatus.ACTIVE, FileStatus.BLOCKED, FileStatus.MODERATION);
Page<FileEntity> files = fileEntityRepository.findFiles(users.stream().map(User::getId).toList(),
statusesForSearch, pageable);
Long totalSize = fileEntityRepository.sumFileSize(
users.stream().map(User::getId).toList(),
statusesForSearch);
List<FileEntityResponse> filesToResponse = files.stream()
.map(file -> convertToResponse(file, version))
.toList();
return FileResponse.builder()
.files(filesToResponse)
.totalCount((int) files.getTotalElements())
.totalSize(totalSize != null ? totalSize : 0L)
.formattedTotalSize(formatFileSize(totalSize != null ? totalSize : 0L))
.page(pageable.getPageNumber())
.pageSize(pageable.getPageSize())
.build();
}
@Transactional(readOnly = true)
public FileResponse getUserFiles(Long userId, int page, int pageSize, int version) {
User user = userRepository.findById(userId).orElseThrow();