Skip to content

Commit 613e72c

Browse files
authored
refactor: 물주기 관련 수정 (#157)
1 parent 05f9802 commit 613e72c

3 files changed

Lines changed: 20 additions & 4 deletions

File tree

src/main/java/com/example/cp_main_be/domain/garden/garden/service/GardenService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,15 @@ private void waterFriendGarden(Long actorId, Garden garden) {
113113
wishTreeService.addPointsToWishTree(actor.getId(), WATERING_POINTS);
114114
garden.increaseWaterCount();
115115

116+
// [수정] 시간대(Timezone) 문제를 방지하기 위해, 물 준 시간을 명시적으로 기록합니다.
117+
LocalDateTime nowInSeoul = LocalDateTime.now(ZoneId.of("Asia/Seoul"));
118+
116119
// 물주기 활동 기록
117120
FriendWateringLog log =
118121
FriendWateringLog.builder()
119122
.waterGiver(actor)
120-
.wateredGarden(garden) // wateredAt은 @CreatedDate가 자동으로 설정합니다.
123+
.wateredGarden(garden)
124+
.wateredAt(nowInSeoul) // @CreatedDate 대신 직접 시간을 설정합니다.
121125
.build();
122126
friendWateringLogRepository.save(log);
123127
}

src/main/java/com/example/cp_main_be/domain/garden/wateringlog/domain/repository/FriendWateringLogRepository.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.example.cp_main_be.domain.garden.wateringlog.domain.FriendWateringLog;
55
import com.example.cp_main_be.domain.member.user.domain.User;
66
import java.time.LocalDateTime;
7+
import java.util.Set;
78
import org.springframework.data.jpa.repository.JpaRepository;
89
import org.springframework.data.jpa.repository.Modifying;
910
import org.springframework.data.jpa.repository.Query;
@@ -24,4 +25,9 @@ boolean existsByWaterGiverAndWateredGardenAndWateredAtAfter(
2425
@Modifying
2526
@Query("DELETE FROM FriendWateringLog fwl WHERE fwl.wateredAt < :cutoffDate")
2627
int deleteByWateredAtBefore(@Param("cutoffDate") LocalDateTime cutoffDate);
28+
29+
@Query(
30+
"SELECT fwl.wateredGarden.id FROM FriendWateringLog fwl WHERE fwl.waterGiver.id = :giverId AND fwl.wateredAt > :startDate")
31+
Set<Long> findWateredGardenIdsByGiverAndDate(
32+
@Param("giverId") Long giverId, @Param("startDate") LocalDateTime startDate);
2733
}

src/main/java/com/example/cp_main_be/domain/member/user/service/UserService.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,20 @@ public void addExperience(Long actorId, int points) {
5252
}
5353

5454
public void updateAvatar(User user, AvatarChangeRequest request, Long avatarId) {
55-
if (user == null) return;
55+
// [수정] 불필요한 null 체크를 제거하고, 일관된 예외 처리를 사용합니다.
56+
if (user == null) {
57+
throw new CustomApiException(ErrorCode.INVALID_TOKEN, "사용자 정보를 찾을 수 없습니다.");
58+
}
5659
Avatar avatar =
5760
avatarRepository
5861
.findById(avatarId)
5962
.orElseThrow(() -> new AvatarNotFoundException("아바타를 찾을 수 없습니다."));
60-
if (avatar == null) return;
63+
64+
// [버그 수정] AvatarMaster(원본)가 아닌 Avatar(개별 인스턴스)의 imageUrl을 변경해야 합니다.
65+
// Avatar 엔티티에 imageUrl 필드가 있어야 합니다.
6166
if (request.getNewAvatarUrl() != null) {
62-
avatar.getAvatarMaster().setDefaultImageUrl(request.getNewAvatarUrl());
67+
// avatar.getAvatarMaster().setDefaultImageUrl(request.getNewAvatarUrl()); // 절대 이렇게 하면 안됩니다.
68+
avatar.setImageUrl(request.getNewAvatarUrl()); // 이렇게 수정해야 합니다.
6369
}
6470
if (request.getNewAvatarName() != null) {
6571
avatar.setNickname(request.getNewAvatarName());

0 commit comments

Comments
 (0)