diff --git a/src/main/java/org/cotato/csquiz/domain/attendance/entity/AttendanceRecord.java b/src/main/java/org/cotato/csquiz/domain/attendance/entity/AttendanceRecord.java index 3855ac8e..789e0238 100644 --- a/src/main/java/org/cotato/csquiz/domain/attendance/entity/AttendanceRecord.java +++ b/src/main/java/org/cotato/csquiz/domain/attendance/entity/AttendanceRecord.java @@ -78,4 +78,8 @@ public static AttendanceRecord offlineRecord(Attendance attendance, Long memberI attendance ); } + + public void updateAttendanceType(AttendanceType attendanceType) { + this.attendanceType = attendanceType; + } } diff --git a/src/main/java/org/cotato/csquiz/domain/attendance/repository/AttendanceRecordRepository.java b/src/main/java/org/cotato/csquiz/domain/attendance/repository/AttendanceRecordRepository.java index 69ed288d..f70eb73e 100644 --- a/src/main/java/org/cotato/csquiz/domain/attendance/repository/AttendanceRecordRepository.java +++ b/src/main/java/org/cotato/csquiz/domain/attendance/repository/AttendanceRecordRepository.java @@ -1,8 +1,10 @@ package org.cotato.csquiz.domain.attendance.repository; import java.util.List; +import java.util.Optional; import org.cotato.csquiz.domain.attendance.entity.Attendance; import org.cotato.csquiz.domain.attendance.entity.AttendanceRecord; +import org.cotato.csquiz.domain.attendance.enums.AttendanceStatus; import org.cotato.csquiz.domain.attendance.enums.AttendanceType; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -13,4 +15,6 @@ public interface AttendanceRecordRepository extends JpaRepository findAllByAttendanceIdsInQuery(@Param("attendances") List attendances); boolean existsByAttendanceIdAndMemberIdAndAttendanceType(Long attendanceId, Long memberId, AttendanceType attendanceType); + + Optional findByIdAndAttendanceStatus(Long id, AttendanceStatus attendanceStatus); } diff --git a/src/main/java/org/cotato/csquiz/domain/attendance/service/OfflineAttendClient.java b/src/main/java/org/cotato/csquiz/domain/attendance/service/OfflineAttendClient.java index d6a0f284..0652af7c 100644 --- a/src/main/java/org/cotato/csquiz/domain/attendance/service/OfflineAttendClient.java +++ b/src/main/java/org/cotato/csquiz/domain/attendance/service/OfflineAttendClient.java @@ -35,8 +35,14 @@ public AttendResponse request(AttendanceParams params, Long memberId, Attendance Double accuracy = attendance.getLocation().calculateAccuracy(request.getLocation()); validateAccuracy(accuracy); - attendanceRecordRepository.save( - AttendanceRecord.offlineRecord(attendance, memberId, accuracy, attendanceStatus)); + attendanceRecordRepository.findByIdAndAttendanceStatus(memberId, attendanceStatus).ifPresentOrElse( + record -> { + record.updateAttendanceType(request.attendanceType()); + attendanceRecordRepository.save(record); + }, + () -> attendanceRecordRepository.save( + AttendanceRecord.offlineRecord(attendance, memberId, accuracy, attendanceStatus)) + ); return AttendResponse.from(attendanceStatus); }