diff --git a/src/main/java/org/ros/chatto/controller/StatisticsController.java b/src/main/java/org/ros/chatto/controller/StatisticsController.java new file mode 100644 index 0000000..abf5176 --- /dev/null +++ b/src/main/java/org/ros/chatto/controller/StatisticsController.java @@ -0,0 +1,29 @@ +package org.ros.chatto.controller; + +import java.time.Instant; + +import org.ros.chatto.dto.StatsDTO; +import org.ros.chatto.service.StatisticsService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping("/api/stats") +@RequiredArgsConstructor +public class StatisticsController { + private final StatisticsService statisticsService; + + @GetMapping + public StatsDTO rootStats() { + return StatsDTO.builder() + .totalMessages(statisticsService.totalMessage()) + .totalOnlineUsers(statisticsService.totalUsersOnline()) + .numMessagesToday( + statisticsService.messagesOnDay(Instant.now())) + .totalUsers(statisticsService.totalUsers()).build(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/ros/chatto/dto/StatsDTO.java b/src/main/java/org/ros/chatto/dto/StatsDTO.java new file mode 100644 index 0000000..e70f3db --- /dev/null +++ b/src/main/java/org/ros/chatto/dto/StatsDTO.java @@ -0,0 +1,21 @@ +package org.ros.chatto.dto; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class StatsDTO { + @Builder.Default + private long totalUsers = 0; + + @Builder.Default + private long totalOnlineUsers = 0; + + @Builder.Default + private long totalMessages = 0; + + @Builder.Default + private long numMessagesToday = 0; + +} \ No newline at end of file diff --git a/src/main/java/org/ros/chatto/service/StatisticsService.java b/src/main/java/org/ros/chatto/service/StatisticsService.java index cf5af8b..9b0daf2 100644 --- a/src/main/java/org/ros/chatto/service/StatisticsService.java +++ b/src/main/java/org/ros/chatto/service/StatisticsService.java @@ -6,11 +6,13 @@ import org.ros.chatto.repository.ChatMessageRepository; import org.ros.chatto.repository.UserRepository; import org.ros.chatto.repository.UserSessionRepository; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Service +@Transactional(readOnly = true) public class StatisticsService { private final ChatMessageRepository chatMessageRepository; private final UserRepository userRepo;