From 79ca410ab91908b0d4e860e7b5fec59f6d9f2a74 Mon Sep 17 00:00:00 2001 From: yoownny Date: Sat, 1 Mar 2025 12:19:28 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]=20:=20home=20api=EC=97=90=20lastlogindat?= =?UTF-8?q?e=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/repository/UserAttendanceRepository.java | 4 ++++ .../user/home/controller/HomeController.java | 3 --- .../balbambalbam/user/home/dto/HomeInfoDto.java | 3 +++ .../user/home/service/HomeInfoService.java | 14 ++++++++++++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/potato/balbambalbam/data/repository/UserAttendanceRepository.java b/src/main/java/com/potato/balbambalbam/data/repository/UserAttendanceRepository.java index 36556b5..587914d 100644 --- a/src/main/java/com/potato/balbambalbam/data/repository/UserAttendanceRepository.java +++ b/src/main/java/com/potato/balbambalbam/data/repository/UserAttendanceRepository.java @@ -2,6 +2,7 @@ import com.potato.balbambalbam.data.entity.UserAttendance; import java.time.LocalDate; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; @@ -36,4 +37,7 @@ List findWeeklyAttendance(@Param("userId") Long userId, @Query("SELECT COUNT(ua) FROM user_attendance ua WHERE ua.userId = :userId AND ua.isPresent = :isPresent") Long countByUserIdAndIsPresent(@Param("userId") Long userId, @Param("isPresent") Boolean isPresent); + + Optional findTopByUserIdAndAttendanceDateBeforeOrderByAttendanceDateDesc(Long userId, LocalDate today); + } \ No newline at end of file diff --git a/src/main/java/com/potato/balbambalbam/user/home/controller/HomeController.java b/src/main/java/com/potato/balbambalbam/user/home/controller/HomeController.java index 11c65b9..edb8fc4 100644 --- a/src/main/java/com/potato/balbambalbam/user/home/controller/HomeController.java +++ b/src/main/java/com/potato/balbambalbam/user/home/controller/HomeController.java @@ -23,11 +23,8 @@ @Tag(name = "Home API", description = "홈 화면에 필요한 사용자 레벨, 레벨 경험치, 사용자 경험치, 주간 출석 상황, 오늘의 추천 단어를 반환한다. ") public class HomeController { - private final JoinService joinService; private final JWTUtil jwtUtil; private final HomeInfoService homeInfoService; - private final NotificationService notificationService; - @Operation(summary = "홈 화면 정보 조회", description = "사용자의 홈 화면에 필요한 모든 정보를 반환한다.") @ApiResponses(value = { diff --git a/src/main/java/com/potato/balbambalbam/user/home/dto/HomeInfoDto.java b/src/main/java/com/potato/balbambalbam/user/home/dto/HomeInfoDto.java index 4ad1826..7e22cb9 100644 --- a/src/main/java/com/potato/balbambalbam/user/home/dto/HomeInfoDto.java +++ b/src/main/java/com/potato/balbambalbam/user/home/dto/HomeInfoDto.java @@ -1,6 +1,7 @@ package com.potato.balbambalbam.user.home.dto; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; import lombok.Getter; import lombok.Setter; @@ -33,4 +34,6 @@ public class HomeInfoDto { private Long customCardNumber; @Schema(description = "읽지 않은 알림 존재 여부", example = "true") private boolean hasUnreadNotifications; + @Schema(description = "최근 로그인 날짜", example = "2025-02-17") + private LocalDate lastLoginDate; } diff --git a/src/main/java/com/potato/balbambalbam/user/home/service/HomeInfoService.java b/src/main/java/com/potato/balbambalbam/user/home/service/HomeInfoService.java index 18d7acc..341ba74 100644 --- a/src/main/java/com/potato/balbambalbam/user/home/service/HomeInfoService.java +++ b/src/main/java/com/potato/balbambalbam/user/home/service/HomeInfoService.java @@ -20,6 +20,7 @@ import java.time.temporal.TemporalAdjusters; import java.util.Arrays; import java.util.List; +import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -47,6 +48,7 @@ public HomeInfoDto getHomeInfo(Long userId) { setDailyWordInfo(homeInfoDto); setUserNumInfo(userId, homeInfoDto); homeInfoDto.setHasUnreadNotifications(notificationService.hasUnreadNotifications(userId)); + setLastLoginDate(userId, homeInfoDto); return homeInfoDto; } @@ -129,4 +131,16 @@ private void setUserNumInfo(Long userId, HomeInfoDto homeInfoDto) { homeInfoDto.setCustomCardNumber(customCards); } + private void setLastLoginDate(Long userId, HomeInfoDto homeInfoDto) { + LocalDate today = LocalDate.now(); + Optional lastAttendance = userAttendanceRepository + .findTopByUserIdAndAttendanceDateBeforeOrderByAttendanceDateDesc(userId, today); + + if (lastAttendance.isPresent()) { + homeInfoDto.setLastLoginDate(lastAttendance.get().getAttendanceDate()); + } else { + homeInfoDto.setLastLoginDate(null); + } + } + }