diff --git a/src/main/java/com/example/log4u/domain/diary/facade/DiaryFacade.java b/src/main/java/com/example/log4u/domain/diary/facade/DiaryFacade.java index 3839bcb1..558bc20b 100644 --- a/src/main/java/com/example/log4u/domain/diary/facade/DiaryFacade.java +++ b/src/main/java/com/example/log4u/domain/diary/facade/DiaryFacade.java @@ -57,12 +57,15 @@ public void createDiary(Long userId, DiaryRequestDto request) { * 1. diaryService: 다이어리 검증 * 2. mediaService: 해당 다이어리 이미지 삭제
* 3. diaryService: 다이어리 삭제
+ * 4. mapService: 해당 구역 카운트 감소 * */ @Transactional public void deleteDiary(Long userId, Long diaryId) { Diary diary = diaryService.getDiaryAfterValidateOwnership(diaryId, userId); mediaService.deleteMediaByDiaryId(diaryId); hashtagService.deleteHashtagsByDiaryId(diaryId); + mapService.decreaseRegionDiaryCount(diary.getLocation().getLatitude(), diary.getLocation().getLongitude()); + diaryService.deleteDiary(diary); } @@ -72,12 +75,16 @@ public void deleteDiary(Long userId, Long diaryId) { * 1. diaryService: 다이어리 검증
* 2. mediaService: 해당 다이어리 이미지 삭제
* 3. diaryService: 다이어리 수정 + * 4. mapService: 해당 구역 카운트 감소 + * 5. mapService: 해당 구역 카운트 증가 * */ @Transactional public void updateDiary(Long userId, Long diaryId, DiaryRequestDto request) { Diary diary = diaryService.getDiaryAfterValidateOwnership(diaryId, userId); mediaService.updateMediaByDiaryId(diary.getDiaryId(), request.mediaList()); hashtagService.saveOrUpdateHashtag(diary.getDiaryId(), request.hashtagList()); + mapService.decreaseRegionDiaryCount(diary.getLocation().getLatitude(), diary.getLocation().getLongitude()); + mapService.increaseRegionDiaryCount(request.location().latitude(), request.location().longitude()); String newThumbnailUrl = mediaService.extractThumbnailUrl(request.mediaList()); diaryService.updateDiary(diary, request, newThumbnailUrl); diff --git a/src/main/java/com/example/log4u/domain/map/entity/SidoAreasDiaryCount.java b/src/main/java/com/example/log4u/domain/map/entity/SidoAreasDiaryCount.java index 2c078c57..8a944c6e 100644 --- a/src/main/java/com/example/log4u/domain/map/entity/SidoAreasDiaryCount.java +++ b/src/main/java/com/example/log4u/domain/map/entity/SidoAreasDiaryCount.java @@ -25,4 +25,8 @@ public class SidoAreasDiaryCount { public void incrementCount() { this.diaryCount++; } + + public void decrementCount() { + this.diaryCount = Math.max(0, this.diaryCount - 1); + } } diff --git a/src/main/java/com/example/log4u/domain/map/entity/SiggAreasDiaryCount.java b/src/main/java/com/example/log4u/domain/map/entity/SiggAreasDiaryCount.java index 3cab8a8f..bae8e648 100644 --- a/src/main/java/com/example/log4u/domain/map/entity/SiggAreasDiaryCount.java +++ b/src/main/java/com/example/log4u/domain/map/entity/SiggAreasDiaryCount.java @@ -25,7 +25,7 @@ public void incrementCount() { this.diaryCount++; } - public void decrement() { + public void decrementCount() { this.diaryCount = Math.max(0, this.diaryCount - 1); } } diff --git a/src/main/java/com/example/log4u/domain/map/service/MapService.java b/src/main/java/com/example/log4u/domain/map/service/MapService.java index af676c53..ac9a6682 100644 --- a/src/main/java/com/example/log4u/domain/map/service/MapService.java +++ b/src/main/java/com/example/log4u/domain/map/service/MapService.java @@ -60,6 +60,23 @@ public void increaseRegionDiaryCount(Double lat, Double lon) { }); } + @Transactional + public void decreaseRegionDiaryCount(Double lat, Double lon) { + sidoAreasRepository.findRegionByLatLon(lat, lon) + .flatMap(sido -> sidoAreasDiaryCountRepository.findById(sido.getId())) + .ifPresent(count -> { + count.decrementCount(); + sidoAreasDiaryCountRepository.save(count); + }); + + siggAreasRepository.findRegionByLatLon(lat, lon) + .flatMap(sigg -> siggAreasDiaryCountRepository.findById(sigg.getGid())) + .ifPresent(count -> { + count.decrementCount(); + siggAreasDiaryCountRepository.save(count); + }); + } + @Transactional(readOnly = true) public List getDiariesInBounds(double south, double north, double west, double east) { return diaryRepository.findDiariesInBounds(south, north, west, east);