@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user