Skip to content

Commit 991c0a7

Browse files
authored
Merge pull request #67 from Nexters/dev
Dev
2 parents b225017 + 9af8816 commit 991c0a7

File tree

2 files changed

+36
-32
lines changed

2 files changed

+36
-32
lines changed

src/main/java/donmani/donmani_server/webhook/repository/WebHookRepository.java

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,43 @@
66
import java.time.LocalDateTime;
77

88
public interface WebHookRepository extends JpaRepository<User, Long> {
9-
@Query("SELECT COUNT(u) FROM User u WHERE u.createdDate BETWEEN :start AND :end")
10-
Integer countNewUsersOnDate(LocalDateTime start, LocalDateTime end);
9+
@Query("SELECT COUNT(*) FROM User u WHERE DATE_FORMAT(u.createdDate, '%Y%m%d') = DATE_FORMAT(:date, '%Y%m%d')")
10+
Integer countNewUsersOnDate(LocalDateTime date);
1111

12-
@Query("SELECT COUNT(u) FROM User u WHERE u.createdDate <= :end or u.createdDate is null")
13-
Integer countAllUsersBefore(LocalDateTime end);
12+
@Query("SELECT COUNT(*) FROM User u WHERE DATE_FORMAT(u.createdDate, '%Y%m%d') <= DATE_FORMAT(:date, '%Y%m%d') or u.createdDate is null")
13+
Integer countAllUsersBefore(LocalDateTime date);
1414

15-
@Query("SELECT COUNT(u) FROM User u WHERE u.lastLoginDate BETWEEN :start AND :end")
16-
Integer countLoginUsersOnDate(LocalDateTime start, LocalDateTime end);
15+
@Query("SELECT COUNT(*) FROM User u WHERE DATE_FORMAT(u.lastLoginDate, '%Y%m%d') = DATE_FORMAT(:date, '%Y%m%d')")
16+
Integer countLoginUsersOnDate(LocalDateTime date);
1717

18-
@Query("SELECT COUNT(e) FROM Expense e WHERE e.createdDate BETWEEN :start AND :end group by e.userId")
19-
Integer countExpenseSubmittersOnDate(LocalDateTime start, LocalDateTime end);
18+
@Query(value =
19+
"SELECT COUNT(*)\n"
20+
+ "FROM (\n"
21+
+ " SELECT COUNT(*)\n"
22+
+ " FROM Expense e\n"
23+
+ " WHERE DATE_FORMAT(e.created_date, '%Y%m%d') = DATE_FORMAT(:date, '%Y%m%d')\n"
24+
+ " GROUP BY e.user_id\n"
25+
+ " ) a"
26+
, nativeQuery = true)
27+
Integer countExpenseSubmittersOnDate(LocalDateTime date);
2028

2129
// @Query("SELECT COUNT(e) FROM User e WHERE e.isNoticeEnable = TRUE")
22-
@Query("SELECT COUNT(f) FROM FCMToken f")
30+
@Query("SELECT COUNT(*) FROM FCMToken f")
2331
Integer countByNoticeEnableTrueUser();
2432

2533
@Query(value =
26-
"SELECT COUNT(*)\n"
27-
+ "FROM (\n"
28-
+ " SELECT user_id\n"
29-
+ " FROM (\n"
30-
+ " SELECT \n"
31-
+ " user_id,\n"
32-
+ " DATE(created_date) AS log_date,\n"
33-
+ " ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY DATE(created_date)) \n"
34-
+ " - DENSE_RANK() OVER (PARTITION BY user_id ORDER BY DATE(created_date)) AS grp\n"
35-
+ " FROM expense\n"
36-
+ " GROUP BY user_id, DATE(created_date)\n"
37-
+ " ) a\n"
38-
+ " GROUP BY user_id, grp\n"
39-
+ " HAVING COUNT(*) >= :day) b\n"
40-
+ "GROUP BY user_id",
41-
nativeQuery = true)
42-
Integer countUsersWithStreak(int day);
34+
"SELECT COUNT(*)\n"
35+
+ "FROM (\n"
36+
+ " SELECT COUNT(*)\n"
37+
+ " FROM (\n"
38+
+ " SELECT e.user_id, e.created_date\n"
39+
+ " FROM Expense e\n"
40+
+ " WHERE DATE_FORMAT(e.created_date, '%Y%m%d') BETWEEN DATE_FORMAT(:date, '%Y%m%d') - INTERVAL :day DAY AND DATE_FORMAT(:date, '%Y%m%d')\n"
41+
+ " GROUP BY e.user_id, e.created_date\n"
42+
+ " ) a\n"
43+
+ " GROUP BY a.user_id\n"
44+
+ " HAVING COUNT(*) = :day + 1\n"
45+
+ " ) b"
46+
, nativeQuery = true)
47+
Integer countUsersWithStreak(LocalDateTime date, int day);
4348
}

src/main/java/donmani/donmani_server/webhook/service/WebHookService.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,30 @@ public void sendDailyUserStatsReport() {
2929
LocalDate today = LocalDate.now(ZoneId.of("Asia/Seoul"));
3030

3131
LocalDateTime yesterday = today.atStartOfDay().minusDays(1);
32-
LocalDateTime endOfYesterday = today.atStartOfDay().minusNanos(1);
3332

3433
String formattedToday = today.format(formatter);
3534
String formattedYesterday = yesterday.format(formatter);
3635

3736
// 1. 오늘 앱 설치 수 (신규 가입)
38-
Integer todayNewUserCount = webHookRepository.countNewUsersOnDate(yesterday, endOfYesterday);
37+
Integer todayNewUserCount = webHookRepository.countNewUsersOnDate(yesterday);
3938

4039
// 2. 누적 앱 설치 수
4140
Integer totalUserCountUntilYesterday = webHookRepository.countAllUsersBefore(yesterday);
4241

4342
// 3. 오늘 서비스 진입 수
44-
Integer todayLoginUserCount = webHookRepository.countLoginUsersOnDate(yesterday, endOfYesterday);
43+
Integer todayLoginUserCount = webHookRepository.countLoginUsersOnDate(yesterday);
4544

4645
// 4. 오늘 기록 완료 수
47-
Integer todaySubmittedUserCount = webHookRepository.countExpenseSubmittersOnDate(yesterday, endOfYesterday);
46+
Integer todaySubmittedUserCount = webHookRepository.countExpenseSubmittersOnDate(yesterday);
4847

4948
// 5. 알림 수신 동의 여부 수
5049
Integer notificationOptInUserCount = webHookRepository.countByNoticeEnableTrueUser();
5150

5251
// 6. 2일 연속 기록 작성 수
53-
Integer twoDayStreakUserCount = webHookRepository.countUsersWithStreak(2);
52+
Integer twoDayStreakUserCount = webHookRepository.countUsersWithStreak(yesterday, 1);
5453

5554
// 7. 3일 연속 기록 작성 수
56-
Integer threeDayStreakUserCount = webHookRepository.countUsersWithStreak(3);
55+
Integer threeDayStreakUserCount = webHookRepository.countUsersWithStreak(yesterday, 2);
5756

5857
sendToDiscord(formattedToday
5958
, formattedYesterday

0 commit comments

Comments
 (0)