Skip to content

Commit fc03c82

Browse files
Merge pull request #271 from prgrms-web-devcourse-final-project/fix/alarm/invite-error
[EA3-201]Fix: 초대 수락/거절 시 받은 사람 ID와 알림 ID를 통해 찾도록 변경
2 parents 9e3ae5d + 119bc65 commit fc03c82

File tree

4 files changed

+26
-9
lines changed

4 files changed

+26
-9
lines changed

src/main/java/grep/neogulcoder/domain/alram/controller/AlarmController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public ApiResponse<Void> respondToInvite(@AuthenticationPrincipal Principal prin
4141
if (accepted) {
4242
alarmService.acceptInvite(principal.getUserId(), alarmId);
4343
} else {
44-
alarmService.rejectInvite(principal.getUserId());
44+
alarmService.rejectInvite(principal.getUserId(), alarmId);
4545
}
4646

4747
return ApiResponse.success(accepted ? "스터디 초대를 수락했습니다." : "스터디 초대를 거절했습니다.");

src/main/java/grep/neogulcoder/domain/alram/exception/code/AlarmErrorCode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
@Getter
88
public enum AlarmErrorCode implements ErrorCode {
99

10-
ALARM_NOT_FOUND("A001",HttpStatus.NOT_FOUND,"알람을 찾을 수 없습니다.");
10+
ALARM_NOT_FOUND("A001",HttpStatus.NOT_FOUND,"알람을 찾을 수 없습니다."),
11+
ALREADY_CHECKED("A002",HttpStatus.BAD_REQUEST,"이미 읽은 알림입니다.");
1112

1213
private final String code;
1314
private final HttpStatus status;

src/main/java/grep/neogulcoder/domain/alram/repository/AlarmRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
import grep.neogulcoder.domain.alram.entity.Alarm;
44
import java.util.List;
5+
import java.util.Optional;
56
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.stereotype.Repository;
68

9+
@Repository
710
public interface AlarmRepository extends JpaRepository<Alarm, Long> {
811
List<Alarm> findAllByReceiverUserIdAndCheckedFalse(Long receiverUserId);
912
List<Alarm> findAllByReceiverUserId(Long receiverUserId);
10-
13+
Optional<Alarm> findByReceiverUserIdAndId(Long targetUserId, Long alarmId);
1114
}

src/main/java/grep/neogulcoder/domain/alram/service/AlarmService.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
import java.util.List;
3939

40+
import static grep.neogulcoder.domain.alram.exception.code.AlarmErrorCode.ALREADY_CHECKED;
4041
import static grep.neogulcoder.domain.recruitment.RecruitmentErrorCode.NOT_FOUND;
4142
import static grep.neogulcoder.domain.study.exception.code.StudyErrorCode.STUDY_LEADER_NOT_FOUND;
4243
import static grep.neogulcoder.domain.study.exception.code.StudyErrorCode.STUDY_NOT_FOUND;
@@ -113,18 +114,27 @@ public void handleStudyInviteEvent(StudyInviteEvent event) {
113114
@Transactional
114115
public void acceptInvite(Long targetUserId, Long alarmId) {
115116

117+
if(isChecked(targetUserId, alarmId)){
118+
throw new BusinessException(ALREADY_CHECKED);
119+
}
120+
116121
validateParticipantStudyLimit(targetUserId);
117122

118-
Alarm alarm = findValidAlarm(alarmId);
123+
Alarm alarm = findValidAlarm(targetUserId, alarmId);
119124
Long studyId = alarm.getDomainId();
120125
Study study = findValidStudy(studyId);
121126
studyMemberRepository.save(StudyMember.createMember(study, targetUserId));
122127
alarm.checkAlarm();
123128
}
124129

125130
@Transactional
126-
public void rejectInvite(Long alarmId) {
127-
Alarm alarm = findValidAlarm(alarmId);
131+
public void rejectInvite(Long targetUserId,Long alarmId) {
132+
133+
if(isChecked(targetUserId, alarmId)){
134+
throw new BusinessException(ALREADY_CHECKED);
135+
}
136+
137+
Alarm alarm = findValidAlarm(targetUserId, alarmId);
128138
alarm.checkAlarm();
129139
}
130140

@@ -248,9 +258,8 @@ public void handleStudyPostCommentEvent(StudyPostCommentEvent event) {
248258
);
249259
}
250260

251-
private Alarm findValidAlarm(Long alarmId) {
252-
return alarmRepository.findById(alarmId)
253-
.orElseThrow(() -> new NotFoundException(AlarmErrorCode.ALARM_NOT_FOUND));
261+
private Alarm findValidAlarm(Long targetUserId, Long alarmId) {
262+
return alarmRepository.findByReceiverUserIdAndId(targetUserId, alarmId).orElseThrow(() -> new NotFoundException(AlarmErrorCode.ALARM_NOT_FOUND));
254263
}
255264

256265
private Study findValidStudy(Long studyId) {
@@ -264,4 +273,8 @@ private void validateParticipantStudyLimit(Long userId) {
264273
throw new BusinessException(APPLICATION_PARTICIPANT_LIMIT_EXCEEDED);
265274
}
266275
}
276+
277+
private boolean isChecked(Long targetUserId, Long alarmId) {
278+
return findValidAlarm(targetUserId, alarmId).isChecked();
279+
}
267280
}

0 commit comments

Comments
 (0)