From 4e40f0bdd8a6b6e70360c20213d707a79d07adab Mon Sep 17 00:00:00 2001 From: Rohan Sircar Date: Tue, 21 Jul 2020 20:16:14 +0530 Subject: [PATCH] Added basic statistics service #11 --- .../repository/ChatMessageRepository.java | 15 ++++++-- .../ros/chatto/repository/UserRepository.java | 3 ++ .../repository/UserSessionRepository.java | 8 +++-- .../ros/chatto/service/StatisticsService.java | 34 +++++++++++++++++++ 4 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 src/main/java/org/ros/chatto/service/StatisticsService.java diff --git a/src/main/java/org/ros/chatto/repository/ChatMessageRepository.java b/src/main/java/org/ros/chatto/repository/ChatMessageRepository.java index aaeb063..f6dce1f 100644 --- a/src/main/java/org/ros/chatto/repository/ChatMessageRepository.java +++ b/src/main/java/org/ros/chatto/repository/ChatMessageRepository.java @@ -10,7 +10,8 @@ import org.springframework.stereotype.Repository; import java.time.Instant; @Repository -public interface ChatMessageRepository extends JpaRepository { +public interface ChatMessageRepository + extends JpaRepository { @Query("select m from ChatMessage m join fetch m.messageCipher mc join fetch m.toUser tu join fetch m.fromUser fu " + "where (tu.userName = ?1 or tu.userName = ?2) and " + "(fu.userName = ?1 or fu.userName = ?2) order by m.messageTime asc") @@ -19,10 +20,18 @@ public interface ChatMessageRepository extends JpaRepository @Query("select m from ChatMessage m join fetch m.messageCipher mc join fetch m.toUser tu join fetch m.fromUser fu " + "where (tu.userName = ?1 or tu.userName = ?2) and " + "(fu.userName = ?1 or fu.userName = ?2) and (m.messageTime > ?3) order by m.messageTime asc") - public List getNewMessages(String fromUser, String toUser, Instant lastMessageTime); + public List getNewMessages(String fromUser, String toUser, + Instant lastMessageTime); @Query("select m from ChatMessage m join fetch m.messageCipher mc join fetch m.toUser tu join fetch m.fromUser fu " + "where (tu.userName = ?1 or tu.userName = ?2) and " + "(fu.userName = ?1 or fu.userName = ?2) order by m.messageTime desc") - public List getAllMessages(String fromUser, String toUser, PageRequest pageRequest); + public List getAllMessages(String fromUser, String toUser, + PageRequest pageRequest); + + @Query("select count(c) from ChatMessage c") + public Long totalMessages(); + + @Query("select count(c) from ChatMessage c where c.messageTime=?1") + public Long messagesOnDate(Instant date); } \ No newline at end of file diff --git a/src/main/java/org/ros/chatto/repository/UserRepository.java b/src/main/java/org/ros/chatto/repository/UserRepository.java index 4c33491..e8c60e1 100644 --- a/src/main/java/org/ros/chatto/repository/UserRepository.java +++ b/src/main/java/org/ros/chatto/repository/UserRepository.java @@ -15,4 +15,7 @@ public interface UserRepository extends JpaRepository { @Query("select cu.userName from ChatUser cu where cu.userName != ?1") public List findAllOtherUserNames(String userName); + + @Query("select count(u) from ChatUser u") + public Long totalUsers(); } diff --git a/src/main/java/org/ros/chatto/repository/UserSessionRepository.java b/src/main/java/org/ros/chatto/repository/UserSessionRepository.java index 10953a7..307e120 100644 --- a/src/main/java/org/ros/chatto/repository/UserSessionRepository.java +++ b/src/main/java/org/ros/chatto/repository/UserSessionRepository.java @@ -8,10 +8,14 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository -public interface UserSessionRepository extends JpaRepository { +public interface UserSessionRepository + extends JpaRepository { @Query("select us from UserSession us join fetch us.user where us.user.userName = ?1 ") public UserSession findByUserName(String userName); - + @Query("select us from UserSession us join fetch us.user") public List findAllUserSessions(); + + @Query("select count(us) from UserSession us where us.online=true") + public Long totalOnlineUsers(); } diff --git a/src/main/java/org/ros/chatto/service/StatisticsService.java b/src/main/java/org/ros/chatto/service/StatisticsService.java new file mode 100644 index 0000000..cf5af8b --- /dev/null +++ b/src/main/java/org/ros/chatto/service/StatisticsService.java @@ -0,0 +1,34 @@ +package org.ros.chatto.service; + +import java.time.Instant; + +import org.ros.chatto.repository.ChatMessageRepository; +import org.ros.chatto.repository.UserRepository; +import org.ros.chatto.repository.UserSessionRepository; +import org.springframework.stereotype.Service; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Service +public class StatisticsService { + private final ChatMessageRepository chatMessageRepository; + private final UserRepository userRepo; + private final UserSessionRepository userSessionRepo; + + public Long totalMessage() { + return chatMessageRepository.totalMessages(); + } + + public Long totalUsers() { + return userRepo.totalUsers(); + } + + public Long totalUsersOnline() { + return userSessionRepo.totalOnlineUsers(); + } + + public Long messagesOnDay(Instant date) { + return chatMessageRepository.messagesOnDate(date); + } +} \ No newline at end of file