dev add method link
Test Workflow / test (push) Has been cancelled

This commit is contained in:
2026-05-05 14:43:28 +07:00
parent cdc45e400d
commit d98a5ce692
3 changed files with 65 additions and 3 deletions
@@ -93,7 +93,7 @@ public class DockViewFileHandler implements RequestHandler {
private BaseResponse handleGetViewStats(BaseRequest request, DocViewerRequest docViewerRequest) {
try {
Long userId = authService.useUserAuthToken(docViewerRequest.getToken());
Long userId = authService.useUserAuthToken(docViewerRequest.getToken());
List<String> fileIds = fileEntityService.getAllUserFiles(userId)
.stream()
.map(FileEntity::getId)
@@ -106,12 +106,12 @@ public class DockViewFileHandler implements RequestHandler {
null);
}
List<DockViewStatsResponse> statsByFileIds = dockViewService.getStatsByFileIds(fileIds);
DockViewStatsResponse totalStats = dockViewService.getTotalStatsByFileIds(fileIds);
return new BaseResponse(request.getMsgId(),
MessageCode.SUCCESS.getCode(),
MessageCode.SUCCESS.getDescription(),
statsByFileIds);
totalStats);
} catch (NotFoundAuthToken e) {
return new BaseResponse(request.getMsgId(),
MessageCode.INVALID_TOKEN.getCode(),
@@ -119,4 +119,33 @@ public class DockViewFileHandler implements RequestHandler {
null);
}
}
// private BaseResponse handleGetViewStats(BaseRequest request, DocViewerRequest docViewerRequest) {
// try {
// Long userId = authService.useUserAuthToken(docViewerRequest.getToken());
// List<String> fileIds = fileEntityService.getAllUserFiles(userId)
// .stream()
// .map(FileEntity::getId)
// .toList();
//
// if (fileIds.isEmpty()) {
// return new BaseResponse(request.getMsgId(),
// MessageCode.FILE_NOT_FOUND.getCode(),
// "Files for search not found",
// null);
// }
//
// List<DockViewStatsResponse> statsByFileIds = dockViewService.getStatsByFileIds(fileIds);
//
// return new BaseResponse(request.getMsgId(),
// MessageCode.SUCCESS.getCode(),
// MessageCode.SUCCESS.getDescription(),
// statsByFileIds);
// } catch (NotFoundAuthToken e) {
// return new BaseResponse(request.getMsgId(),
// MessageCode.INVALID_TOKEN.getCode(),
// "Authentication required",
// null);
// }
// }
}
@@ -28,6 +28,16 @@ public interface DockViewRepository extends JpaRepository<DockView, Long> {
@Query("SELECT dv FROM DockView dv WHERE dv.fileId IN :fileIds")
Page<DockView> findAllByFileIds(@Param("fileIds") List<String> fileIds, Pageable pageable);
@Query("SELECT " +
"COUNT(dv) as totalViews, " +
"COUNT(DISTINCT dv.viewerIp) as uniqueIps, " +
"COUNT(DISTINCT dv.viewerId) as uniqueUsers, " +
"MAX(dv.createdAt) as lastViewDate, " +
"MIN(dv.createdAt) as firstViewDate " +
"FROM DockView dv " +
"WHERE dv.fileId IN :fileIds")
Optional<Object[]> findTotalViewsStatsByFileIds(@Param("fileIds") List<String> fileIds);
Page<DockView> findAllByViewerIdOrderByCreatedAtDesc(Long viewerId, Pageable pageable);
long countByFileId(String fileId);
@@ -79,6 +79,29 @@ public class DockViewService {
.build();
}
public DockViewStatsResponse getTotalStatsByFileIds(List<String> fileIds) {
Optional<Object[]> statsOpt = dockViewRepository.findTotalViewsStatsByFileIds(fileIds);
if (statsOpt.isEmpty() || statsOpt.get() == null) {
return DockViewStatsResponse.builder()
.totalViews(0L)
.uniqueIps(0L)
.uniqueUsers(0L)
.firstViewDate(null)
.lastViewDate(null)
.build();
}
Object[] stats = statsOpt.get();
return DockViewStatsResponse.builder()
.totalViews(stats[0] != null ? (Long) stats[0] : 0L)
.uniqueIps(stats[1] != null ? (Long) stats[1] : 0L)
.uniqueUsers(stats[2] != null ? (Long) stats[2] : 0L)
.lastViewDate((LocalDateTime) stats[3])
.firstViewDate((LocalDateTime) stats[4])
.build();
}
public List<DockViewStatsResponse> getStatsByFileIds(List<String> fileIds) {
List<Object[]> statsList = dockViewRepository.findViewsStatsByFileIds(fileIds);