diff --git a/src/main/java/com/tryna/domain/alarm/controller/AlarmController.java b/src/main/java/com/tryna/domain/reminder/controller/AlarmController.java similarity index 83% rename from src/main/java/com/tryna/domain/alarm/controller/AlarmController.java rename to src/main/java/com/tryna/domain/reminder/controller/AlarmController.java index 7db7c1b..9be0efa 100644 --- a/src/main/java/com/tryna/domain/alarm/controller/AlarmController.java +++ b/src/main/java/com/tryna/domain/reminder/controller/AlarmController.java @@ -1,18 +1,18 @@ -package com.tryna.domain.alarm.controller; - -import com.tryna.domain.alarm.controller.docs.AlarmControllerDocs; -import com.tryna.domain.alarm.dto.ActionItemReminderResponse; -import com.tryna.domain.alarm.dto.AlarmCorrectionResponse; -import com.tryna.domain.alarm.dto.AlarmDetailResponse; -import com.tryna.domain.alarm.dto.AlarmListResponse; -import com.tryna.domain.alarm.dto.AlarmPushTokenRequest; -import com.tryna.domain.alarm.dto.AlarmStateResponse; -import com.tryna.domain.alarm.dto.EventReminderResponse; -import com.tryna.domain.alarm.service.AlarmPushTokenService; -import com.tryna.domain.alarm.service.AlarmQueryService; -import com.tryna.domain.alarm.service.AlarmStateService; -import com.tryna.domain.alarm.service.AlarmTermService; +package com.tryna.domain.reminder.controller; + +import com.tryna.domain.reminder.controller.docs.AlarmControllerDocs; +import com.tryna.domain.reminder.dto.ActionItemReminderResponse; +import com.tryna.domain.reminder.dto.AlarmCorrectionResponse; +import com.tryna.domain.reminder.dto.AlarmDetailResponse; +import com.tryna.domain.reminder.dto.AlarmListResponse; +import com.tryna.domain.reminder.dto.AlarmPushTokenRequest; +import com.tryna.domain.reminder.dto.AlarmStateResponse; +import com.tryna.domain.reminder.dto.EventReminderResponse; +import com.tryna.domain.reminder.service.AlarmPushTokenService; +import com.tryna.domain.reminder.service.AlarmQueryService; import com.tryna.domain.reminder.service.AlarmReminderScheduleService; +import com.tryna.domain.reminder.service.AlarmStateService; +import com.tryna.domain.reminder.service.AlarmTermService; import com.tryna.global.exception.AuthErrorCode; import com.tryna.global.exception.BusinessException; import com.tryna.global.response.ApiResponse; @@ -45,10 +45,16 @@ public class AlarmController implements AlarmControllerDocs { @PostMapping("/term") @Override public ResponseEntity> agreeAlarmTerm() { - alarmTermService.agreeAlarmTerm(resolveOptionalUserId()); + boolean newlyAgreed = alarmTermService.agreeAlarmTerm(resolveOptionalUserId()); + + if (newlyAgreed) { + return ResponseEntity.ok( + ApiResponse.success("F100_ALARM_TERM_200", "알람 약관 동의에 성공했습니다.", null) + ); + } return ResponseEntity.ok( - ApiResponse.success("F100_ALARM_TERM_200", "알람 약관 동의에 성공했습니다.", null) + ApiResponse.success("F100_ALARM_TERM_200", "이미 알람 약관에 동의되어 있습니다.", null) ); } diff --git a/src/main/java/com/tryna/domain/alarm/controller/docs/AlarmControllerDocs.java b/src/main/java/com/tryna/domain/reminder/controller/docs/AlarmControllerDocs.java similarity index 90% rename from src/main/java/com/tryna/domain/alarm/controller/docs/AlarmControllerDocs.java rename to src/main/java/com/tryna/domain/reminder/controller/docs/AlarmControllerDocs.java index bf69219..d30e2de 100644 --- a/src/main/java/com/tryna/domain/alarm/controller/docs/AlarmControllerDocs.java +++ b/src/main/java/com/tryna/domain/reminder/controller/docs/AlarmControllerDocs.java @@ -1,12 +1,12 @@ -package com.tryna.domain.alarm.controller.docs; +package com.tryna.domain.reminder.controller.docs; -import com.tryna.domain.alarm.dto.ActionItemReminderResponse; -import com.tryna.domain.alarm.dto.AlarmCorrectionResponse; -import com.tryna.domain.alarm.dto.AlarmDetailResponse; -import com.tryna.domain.alarm.dto.AlarmListResponse; -import com.tryna.domain.alarm.dto.AlarmPushTokenRequest; -import com.tryna.domain.alarm.dto.AlarmStateResponse; -import com.tryna.domain.alarm.dto.EventReminderResponse; +import com.tryna.domain.reminder.dto.ActionItemReminderResponse; +import com.tryna.domain.reminder.dto.AlarmCorrectionResponse; +import com.tryna.domain.reminder.dto.AlarmDetailResponse; +import com.tryna.domain.reminder.dto.AlarmListResponse; +import com.tryna.domain.reminder.dto.AlarmPushTokenRequest; +import com.tryna.domain.reminder.dto.AlarmStateResponse; +import com.tryna.domain.reminder.dto.EventReminderResponse; import com.tryna.global.response.ApiResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -27,6 +27,7 @@ public interface AlarmControllerDocs { description = """ ALARM 약관에 동의하고 사용자의 알람 발송 상태(alarm_state)를 활성화합니다. terms 테이블의 ALARM 약관에 대한 user_agreed_terms 이력을 생성합니다. + 이미 동의한 사용자가 재요청하면 200과 함께 이미 동의되어 있다는 메시지를 반환합니다. """, operationId = "agreeAlarmTerm" ) diff --git a/src/main/java/com/tryna/domain/alarm/dto/ActionItemReminderResponse.java b/src/main/java/com/tryna/domain/reminder/dto/ActionItemReminderResponse.java similarity index 93% rename from src/main/java/com/tryna/domain/alarm/dto/ActionItemReminderResponse.java rename to src/main/java/com/tryna/domain/reminder/dto/ActionItemReminderResponse.java index 802f66f..e44e22a 100644 --- a/src/main/java/com/tryna/domain/alarm/dto/ActionItemReminderResponse.java +++ b/src/main/java/com/tryna/domain/reminder/dto/ActionItemReminderResponse.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.dto; +package com.tryna.domain.reminder.dto; import com.tryna.domain.reminder.entity.Reminders; diff --git a/src/main/java/com/tryna/domain/alarm/dto/AlarmCorrectionResponse.java b/src/main/java/com/tryna/domain/reminder/dto/AlarmCorrectionResponse.java similarity index 96% rename from src/main/java/com/tryna/domain/alarm/dto/AlarmCorrectionResponse.java rename to src/main/java/com/tryna/domain/reminder/dto/AlarmCorrectionResponse.java index efbdf16..ea37b84 100644 --- a/src/main/java/com/tryna/domain/alarm/dto/AlarmCorrectionResponse.java +++ b/src/main/java/com/tryna/domain/reminder/dto/AlarmCorrectionResponse.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.dto; +package com.tryna.domain.reminder.dto; import com.tryna.domain.reminder.entity.Reminders; import com.tryna.domain.reminder.enums.TargetType; diff --git a/src/main/java/com/tryna/domain/alarm/dto/AlarmDetailResponse.java b/src/main/java/com/tryna/domain/reminder/dto/AlarmDetailResponse.java similarity index 96% rename from src/main/java/com/tryna/domain/alarm/dto/AlarmDetailResponse.java rename to src/main/java/com/tryna/domain/reminder/dto/AlarmDetailResponse.java index 5611815..255ebff 100644 --- a/src/main/java/com/tryna/domain/alarm/dto/AlarmDetailResponse.java +++ b/src/main/java/com/tryna/domain/reminder/dto/AlarmDetailResponse.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.dto; +package com.tryna.domain.reminder.dto; import com.tryna.domain.reminder.entity.Reminders; import com.tryna.domain.reminder.enums.TargetType; diff --git a/src/main/java/com/tryna/domain/alarm/dto/AlarmListResponse.java b/src/main/java/com/tryna/domain/reminder/dto/AlarmListResponse.java similarity index 90% rename from src/main/java/com/tryna/domain/alarm/dto/AlarmListResponse.java rename to src/main/java/com/tryna/domain/reminder/dto/AlarmListResponse.java index 2a3141d..0e05e30 100644 --- a/src/main/java/com/tryna/domain/alarm/dto/AlarmListResponse.java +++ b/src/main/java/com/tryna/domain/reminder/dto/AlarmListResponse.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.dto; +package com.tryna.domain.reminder.dto; import java.util.List; diff --git a/src/main/java/com/tryna/domain/alarm/dto/AlarmPushTokenRequest.java b/src/main/java/com/tryna/domain/reminder/dto/AlarmPushTokenRequest.java similarity index 91% rename from src/main/java/com/tryna/domain/alarm/dto/AlarmPushTokenRequest.java rename to src/main/java/com/tryna/domain/reminder/dto/AlarmPushTokenRequest.java index 0517599..3a1be40 100644 --- a/src/main/java/com/tryna/domain/alarm/dto/AlarmPushTokenRequest.java +++ b/src/main/java/com/tryna/domain/reminder/dto/AlarmPushTokenRequest.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.dto; +package com.tryna.domain.reminder.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/src/main/java/com/tryna/domain/alarm/dto/AlarmStateResponse.java b/src/main/java/com/tryna/domain/reminder/dto/AlarmStateResponse.java similarity index 82% rename from src/main/java/com/tryna/domain/alarm/dto/AlarmStateResponse.java rename to src/main/java/com/tryna/domain/reminder/dto/AlarmStateResponse.java index 7a13355..4172585 100644 --- a/src/main/java/com/tryna/domain/alarm/dto/AlarmStateResponse.java +++ b/src/main/java/com/tryna/domain/reminder/dto/AlarmStateResponse.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.dto; +package com.tryna.domain.reminder.dto; public record AlarmStateResponse( boolean alarmState diff --git a/src/main/java/com/tryna/domain/alarm/dto/EventReminderResponse.java b/src/main/java/com/tryna/domain/reminder/dto/EventReminderResponse.java similarity index 93% rename from src/main/java/com/tryna/domain/alarm/dto/EventReminderResponse.java rename to src/main/java/com/tryna/domain/reminder/dto/EventReminderResponse.java index 534b04c..df43cfa 100644 --- a/src/main/java/com/tryna/domain/alarm/dto/EventReminderResponse.java +++ b/src/main/java/com/tryna/domain/reminder/dto/EventReminderResponse.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.dto; +package com.tryna.domain.reminder.dto; import com.tryna.domain.reminder.entity.Reminders; diff --git a/src/main/java/com/tryna/domain/alarm/service/AlarmPushTokenService.java b/src/main/java/com/tryna/domain/reminder/service/AlarmPushTokenService.java similarity index 97% rename from src/main/java/com/tryna/domain/alarm/service/AlarmPushTokenService.java rename to src/main/java/com/tryna/domain/reminder/service/AlarmPushTokenService.java index 3f123ef..ba691ad 100644 --- a/src/main/java/com/tryna/domain/alarm/service/AlarmPushTokenService.java +++ b/src/main/java/com/tryna/domain/reminder/service/AlarmPushTokenService.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.service; +package com.tryna.domain.reminder.service; import com.tryna.domain.auth.repository.FcmTokenRedisRepository; import com.tryna.global.exception.AlarmErrorCode; diff --git a/src/main/java/com/tryna/domain/alarm/service/AlarmQueryService.java b/src/main/java/com/tryna/domain/reminder/service/AlarmQueryService.java similarity index 95% rename from src/main/java/com/tryna/domain/alarm/service/AlarmQueryService.java rename to src/main/java/com/tryna/domain/reminder/service/AlarmQueryService.java index d4d6cd2..4940b34 100644 --- a/src/main/java/com/tryna/domain/alarm/service/AlarmQueryService.java +++ b/src/main/java/com/tryna/domain/reminder/service/AlarmQueryService.java @@ -1,10 +1,10 @@ -package com.tryna.domain.alarm.service; +package com.tryna.domain.reminder.service; -import com.tryna.domain.alarm.dto.AlarmDetailResponse; -import com.tryna.domain.alarm.dto.AlarmListResponse; -import com.tryna.domain.alarm.util.AlarmCursorCodec; +import com.tryna.domain.reminder.dto.AlarmDetailResponse; +import com.tryna.domain.reminder.dto.AlarmListResponse; import com.tryna.domain.reminder.entity.Reminders; import com.tryna.domain.reminder.repository.RemindersRepository; +import com.tryna.domain.reminder.util.AlarmCursorCodec; import com.tryna.domain.user.entity.Users; import com.tryna.domain.user.repository.UserRepository; import com.tryna.global.exception.AlarmErrorCode; diff --git a/src/main/java/com/tryna/domain/reminder/service/AlarmReminderDispatchExecutor.java b/src/main/java/com/tryna/domain/reminder/service/AlarmReminderDispatchExecutor.java index 8e6e65a..8f779b7 100644 --- a/src/main/java/com/tryna/domain/reminder/service/AlarmReminderDispatchExecutor.java +++ b/src/main/java/com/tryna/domain/reminder/service/AlarmReminderDispatchExecutor.java @@ -2,7 +2,7 @@ import com.tryna.domain.action.entity.ActionItems; import com.tryna.domain.action.repository.ActionItemOccurrenceStatesRepository; -import com.tryna.domain.alarm.service.FcmPushService; +import com.tryna.domain.reminder.service.FcmPushService; import com.tryna.domain.auth.repository.FcmTokenRedisRepository; import com.tryna.domain.event.entity.Events; import com.tryna.domain.event.util.EventRecurrenceCalculator; diff --git a/src/main/java/com/tryna/domain/reminder/service/AlarmReminderScheduleService.java b/src/main/java/com/tryna/domain/reminder/service/AlarmReminderScheduleService.java index 78e849e..722e1bf 100644 --- a/src/main/java/com/tryna/domain/reminder/service/AlarmReminderScheduleService.java +++ b/src/main/java/com/tryna/domain/reminder/service/AlarmReminderScheduleService.java @@ -3,9 +3,9 @@ import com.tryna.domain.action.entity.ActionItems; import com.tryna.domain.action.enums.ItemType; import com.tryna.domain.action.repository.ActionItemsRepository; -import com.tryna.domain.alarm.dto.ActionItemReminderResponse; -import com.tryna.domain.alarm.dto.AlarmCorrectionResponse; -import com.tryna.domain.alarm.dto.EventReminderResponse; +import com.tryna.domain.reminder.dto.ActionItemReminderResponse; +import com.tryna.domain.reminder.dto.AlarmCorrectionResponse; +import com.tryna.domain.reminder.dto.EventReminderResponse; import com.tryna.domain.auth.repository.FcmTokenRedisRepository; import com.tryna.domain.event.entity.Events; import com.tryna.domain.event.repository.EventsRepository; diff --git a/src/main/java/com/tryna/domain/alarm/service/AlarmStateService.java b/src/main/java/com/tryna/domain/reminder/service/AlarmStateService.java similarity index 94% rename from src/main/java/com/tryna/domain/alarm/service/AlarmStateService.java rename to src/main/java/com/tryna/domain/reminder/service/AlarmStateService.java index 164750b..eadaefd 100644 --- a/src/main/java/com/tryna/domain/alarm/service/AlarmStateService.java +++ b/src/main/java/com/tryna/domain/reminder/service/AlarmStateService.java @@ -1,6 +1,6 @@ -package com.tryna.domain.alarm.service; +package com.tryna.domain.reminder.service; -import com.tryna.domain.alarm.dto.AlarmStateResponse; +import com.tryna.domain.reminder.dto.AlarmStateResponse; import com.tryna.domain.term.entity.Terms; import com.tryna.domain.term.enums.TermType; import com.tryna.domain.term.repository.TermsRepository; diff --git a/src/main/java/com/tryna/domain/alarm/service/AlarmTermService.java b/src/main/java/com/tryna/domain/reminder/service/AlarmTermService.java similarity index 91% rename from src/main/java/com/tryna/domain/alarm/service/AlarmTermService.java rename to src/main/java/com/tryna/domain/reminder/service/AlarmTermService.java index 91adf2f..0f8f908 100644 --- a/src/main/java/com/tryna/domain/alarm/service/AlarmTermService.java +++ b/src/main/java/com/tryna/domain/reminder/service/AlarmTermService.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.service; +package com.tryna.domain.reminder.service; import com.tryna.domain.term.entity.Terms; import com.tryna.domain.term.entity.mapping.UserAgreedTerms; @@ -29,7 +29,7 @@ public class AlarmTermService { * ALARM 약관 동의 이력을 저장하고 사용자의 alarm_state를 true로 변경합니다. */ @Transactional - public void agreeAlarmTerm(Long userId) { + public boolean agreeAlarmTerm(Long userId) { Users user = userRepository.findByUserIdAndDeletedAtIsNull(userId) .orElseThrow(() -> new BusinessException(AuthErrorCode.AUTH_401)); @@ -38,10 +38,11 @@ public void agreeAlarmTerm(Long userId) { .orElseThrow(() -> new BusinessException(AlarmErrorCode.F100_ALARM_TERM_400)); if (userAgreedTermsRepository.existsByUser_UserIdAndTerm_TermId(userId, alarmTerm.getTermId())) { - throw new BusinessException(AlarmErrorCode.F100_ALARM_TERM_400); + return false; } userAgreedTermsRepository.save(UserAgreedTerms.create(user, alarmTerm)); user.updateAlarmState(true); + return true; } } diff --git a/src/main/java/com/tryna/domain/alarm/service/FcmPushService.java b/src/main/java/com/tryna/domain/reminder/service/FcmPushService.java similarity index 99% rename from src/main/java/com/tryna/domain/alarm/service/FcmPushService.java rename to src/main/java/com/tryna/domain/reminder/service/FcmPushService.java index 99a6d88..f8b9336 100644 --- a/src/main/java/com/tryna/domain/alarm/service/FcmPushService.java +++ b/src/main/java/com/tryna/domain/reminder/service/FcmPushService.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.service; +package com.tryna.domain.reminder.service; import com.google.firebase.FirebaseApp; import com.google.firebase.messaging.BatchResponse; diff --git a/src/main/java/com/tryna/domain/alarm/util/AlarmCursorCodec.java b/src/main/java/com/tryna/domain/reminder/util/AlarmCursorCodec.java similarity index 98% rename from src/main/java/com/tryna/domain/alarm/util/AlarmCursorCodec.java rename to src/main/java/com/tryna/domain/reminder/util/AlarmCursorCodec.java index 12d2809..84737a4 100644 --- a/src/main/java/com/tryna/domain/alarm/util/AlarmCursorCodec.java +++ b/src/main/java/com/tryna/domain/reminder/util/AlarmCursorCodec.java @@ -1,4 +1,4 @@ -package com.tryna.domain.alarm.util; +package com.tryna.domain.reminder.util; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper;