diff --git a/.gradle/8.8/checksums/checksums.lock b/.gradle/8.8/checksums/checksums.lock index b7b6603..fb5aecf 100644 Binary files a/.gradle/8.8/checksums/checksums.lock and b/.gradle/8.8/checksums/checksums.lock differ diff --git a/.gradle/8.8/checksums/md5-checksums.bin b/.gradle/8.8/checksums/md5-checksums.bin index aa992b8..1f5c5b5 100644 Binary files a/.gradle/8.8/checksums/md5-checksums.bin and b/.gradle/8.8/checksums/md5-checksums.bin differ diff --git a/.gradle/8.8/checksums/sha1-checksums.bin b/.gradle/8.8/checksums/sha1-checksums.bin index e6e0a4f..2afb05d 100644 Binary files a/.gradle/8.8/checksums/sha1-checksums.bin and b/.gradle/8.8/checksums/sha1-checksums.bin differ diff --git a/.gradle/8.8/fileHashes/fileHashes.bin b/.gradle/8.8/fileHashes/fileHashes.bin index 65df950..d1d9872 100644 Binary files a/.gradle/8.8/fileHashes/fileHashes.bin and b/.gradle/8.8/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.8/fileHashes/fileHashes.lock b/.gradle/8.8/fileHashes/fileHashes.lock index 02e1861..217772a 100644 Binary files a/.gradle/8.8/fileHashes/fileHashes.lock and b/.gradle/8.8/fileHashes/fileHashes.lock differ diff --git a/Location-based-target-authentication/src/main/java/com/swyp/goal/controller/GoalRestController.java b/Location-based-target-authentication/src/main/java/com/swyp/goal/controller/GoalRestController.java index 78a5edc..c656366 100644 --- a/Location-based-target-authentication/src/main/java/com/swyp/goal/controller/GoalRestController.java +++ b/Location-based-target-authentication/src/main/java/com/swyp/goal/controller/GoalRestController.java @@ -401,7 +401,7 @@ public ResponseEntity updateGoalStatus(@PathVariable("goalId") Long goalId, @ //임시저장된 목표 수정 (목표조회후 목표선택하여 goalid와 GoalUpdateDto을 보내줘야한다). @Operation( summary = "임시저장된 목표 수정 ", - description = "임시저장된 목표를 목표상세에서 goalId를 통해 불러온후 수정한 데이터 전부를 Goal 형식에 맞춰 보내야한다. 넘기는값은 goalId + goal", + description = "임시저장된 목표를 목표상세에서 goalId를 통해 불러온후 수정한 데이터 전부를 Goal 형식에 맞춰 보내야한다. ", responses = { @ApiResponse( responseCode = "200", diff --git a/Location-based-target-authentication/src/main/java/com/swyp/goal/dto/GoalUpdateDto.java b/Location-based-target-authentication/src/main/java/com/swyp/goal/dto/GoalUpdateDto.java index 704b1b1..00794dd 100644 --- a/Location-based-target-authentication/src/main/java/com/swyp/goal/dto/GoalUpdateDto.java +++ b/Location-based-target-authentication/src/main/java/com/swyp/goal/dto/GoalUpdateDto.java @@ -2,15 +2,21 @@ import java.math.BigDecimal; import java.time.LocalDate; +import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; +import com.swyp.goal.entity.DayOfWeek; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; @AllArgsConstructor +@NoArgsConstructor @Getter +@Setter public class GoalUpdateDto { private String name; @@ -24,4 +30,5 @@ public class GoalUpdateDto { private BigDecimal latitude; private BigDecimal longitude; private Integer radius; + private List selectedDays; } \ No newline at end of file diff --git a/Location-based-target-authentication/src/main/java/com/swyp/goal/repository/GoalDayRepository.java b/Location-based-target-authentication/src/main/java/com/swyp/goal/repository/GoalDayRepository.java index 1631344..5a59231 100644 --- a/Location-based-target-authentication/src/main/java/com/swyp/goal/repository/GoalDayRepository.java +++ b/Location-based-target-authentication/src/main/java/com/swyp/goal/repository/GoalDayRepository.java @@ -3,6 +3,7 @@ import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -16,6 +17,9 @@ public interface GoalDayRepository extends JpaRepository { // 특정 목표 ID에 대한 반복 요일 목록 조회 List findByGoalId(Long goalId); - + // 특정 목표 ID에 대한 모든 요일 데이터 삭제 + @Modifying + @Query("DELETE FROM GoalDay gd WHERE gd.goalId = :goalId") + void deleteByGoalId(@Param("goalId") Long goalId); } \ No newline at end of file diff --git a/Location-based-target-authentication/src/main/java/com/swyp/goal/service/GoalService.java b/Location-based-target-authentication/src/main/java/com/swyp/goal/service/GoalService.java index 9b0eaed..5674a1e 100644 --- a/Location-based-target-authentication/src/main/java/com/swyp/goal/service/GoalService.java +++ b/Location-based-target-authentication/src/main/java/com/swyp/goal/service/GoalService.java @@ -182,6 +182,32 @@ public Goal updateGoal(Long goalId, GoalUpdateDto dto) { if (dto.getLongitude() != null) goal.setLongitude(dto.getLongitude()); if (dto.getRadius() != null) goal.setRadius(dto.getRadius()); + // 요일 데이터 업데이트 + if (dto.getSelectedDays() != null && !dto.getSelectedDays().isEmpty()) { + // 기존 요일 데이터 삭제 + goalDayRepository.deleteByGoalId(goalId); + + // 새 요일 데이터 추가 + for (DayOfWeek day : dto.getSelectedDays()) { + GoalDay goalDay = new GoalDay(); + goalDay.setGoalId(goalId); + goalDay.setDayOfWeek(day); + goalDayRepository.save(goalDay); + } + } + + // 날짜 또는 요일이 변경되었을 때 목표 수행 횟수 재계산 + boolean dateChanged = dto.getStartDate() != null || dto.getEndDate() != null; + boolean daysChanged = dto.getSelectedDays() != null && !dto.getSelectedDays().isEmpty(); + + if (dateChanged || daysChanged) { + LocalDate startDate = dto.getStartDate() != null ? dto.getStartDate() : goal.getStartDate(); + LocalDate endDate = dto.getEndDate() != null ? dto.getEndDate() : goal.getEndDate(); + List selectedDays = dto.getSelectedDays() != null && !dto.getSelectedDays().isEmpty() ? dto.getSelectedDays() : getSelectedDays(goalId); + + int targetCount = calculateTargetCount(startDate, endDate, selectedDays); + goal.setTargetCount(targetCount); + } goal.setUpdatedAt(LocalDateTime.now());