Skip to content

Commit 31be01f

Browse files
Merge pull request #243 from prgrms-web-devcourse-final-project/feature/add/alarm/time
Feature: 알람 목록 조회 시 알람 생성 시간 반환 추가
2 parents eb8f4fe + 1133fd4 commit 31be01f

File tree

2 files changed

+63
-52
lines changed

2 files changed

+63
-52
lines changed

src/main/java/grep/neogulcoder/domain/alram/controller/dto/response/AlarmResponse.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import grep.neogulcoder.domain.alram.type.AlarmType;
44
import grep.neogulcoder.domain.alram.type.DomainType;
5+
import java.time.LocalDateTime;
56
import lombok.Builder;
67
import lombok.Data;
78

@@ -22,28 +23,33 @@ public class AlarmResponse {
2223

2324
private boolean checked;
2425

25-
public static AlarmResponse toResponse(Long id, Long receiverUserId, AlarmType alarmType, DomainType domainType,
26-
Long domainId, String message, boolean checked) {
26+
private LocalDateTime createdDate;
27+
28+
public static AlarmResponse toResponse(Long id, Long receiverUserId, AlarmType alarmType,
29+
DomainType domainType,
30+
Long domainId, String message, boolean checked, LocalDateTime createdDate) {
2731
return AlarmResponse.builder()
28-
.id(id)
29-
.receiverUserId(receiverUserId)
30-
.alarmType(alarmType)
31-
.domainType(domainType)
32-
.domainId(domainId)
33-
.message(message)
34-
.checked(checked)
35-
.build();
32+
.id(id)
33+
.receiverUserId(receiverUserId)
34+
.alarmType(alarmType)
35+
.domainType(domainType)
36+
.domainId(domainId)
37+
.message(message)
38+
.checked(checked)
39+
.createdDate(createdDate)
40+
.build();
3641
}
3742

3843
@Builder
3944
private AlarmResponse(Long id, Long receiverUserId, AlarmType alarmType, DomainType domainType,
40-
Long domainId, String message, boolean checked) {
45+
Long domainId, String message, boolean checked, LocalDateTime createdDate) {
4146
this.id = id;
4247
this.receiverUserId = receiverUserId;
4348
this.alarmType = alarmType;
4449
this.domainType = domainType;
4550
this.domainId = domainId;
4651
this.message = message;
4752
this.checked = checked;
53+
this.createdDate = createdDate;
4854
}
4955
}

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

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@
2525
import grep.neogulcoder.global.exception.business.BusinessException;
2626
import grep.neogulcoder.global.exception.business.NotFoundException;
2727
import grep.neogulcoder.global.provider.finder.MessageFinder;
28-
2928
import java.util.List;
30-
3129
import lombok.RequiredArgsConstructor;
3230
import org.springframework.context.event.EventListener;
3331
import org.springframework.stereotype.Service;
@@ -51,52 +49,55 @@ public class AlarmService {
5149
private final ApplicationRepository applicationRepository;
5250

5351
@Transactional
54-
public void saveAlarm(Long receiverId, AlarmType alarmType, DomainType domainType, Long domainId) {
52+
public void saveAlarm(Long receiverId, AlarmType alarmType, DomainType domainType,
53+
Long domainId) {
5554
String message = messageFinder.findMessage(alarmType, domainType, domainId);
5655
alarmRepository.save(Alarm.init(alarmType, receiverId, domainType, domainId, message));
5756
}
5857

5958
public List<AlarmResponse> getAllUncheckedAlarms(Long receiverUserId) {
6059
return alarmRepository.findAllByReceiverUserIdAndCheckedFalse(receiverUserId).stream()
61-
.map(alarm -> AlarmResponse.toResponse(
62-
alarm.getId(),
63-
alarm.getReceiverUserId(),
64-
alarm.getAlarmType(),
65-
alarm.getDomainType(),
66-
alarm.getDomainId(),
67-
alarm.getMessage(),
68-
alarm.isChecked()))
69-
.toList();
60+
.map(alarm -> AlarmResponse.toResponse(
61+
alarm.getId(),
62+
alarm.getReceiverUserId(),
63+
alarm.getAlarmType(),
64+
alarm.getDomainType(),
65+
alarm.getDomainId(),
66+
alarm.getMessage(),
67+
alarm.isChecked(),
68+
alarm.getCreatedDate()))
69+
.toList();
7070
}
7171

7272
public List<AlarmResponse> getAllAlarms(Long receiverUserId) {
7373
return alarmRepository.findAllByReceiverUserId(receiverUserId).stream()
74-
.map(alarm -> AlarmResponse.toResponse(
75-
alarm.getId(),
76-
alarm.getReceiverUserId(),
77-
alarm.getAlarmType(),
78-
alarm.getDomainType(),
79-
alarm.getDomainId(),
80-
alarm.getMessage(),
81-
alarm.isChecked()))
82-
.toList();
74+
.map(alarm -> AlarmResponse.toResponse(
75+
alarm.getId(),
76+
alarm.getReceiverUserId(),
77+
alarm.getAlarmType(),
78+
alarm.getDomainType(),
79+
alarm.getDomainId(),
80+
alarm.getMessage(),
81+
alarm.isChecked(),
82+
alarm.getCreatedDate()))
83+
.toList();
8384
}
8485

8586
@Transactional
8687
public void checkAllAlarmWithoutInvite(Long receiverUserId) {
8788
List<Alarm> alarms = alarmRepository.findAllByReceiverUserIdAndCheckedFalse(receiverUserId);
8889
alarms.stream()
89-
.filter(alarm -> alarm.getAlarmType() != AlarmType.INVITE)
90-
.forEach(Alarm::checkAlarm);
90+
.filter(alarm -> alarm.getAlarmType() != AlarmType.INVITE)
91+
.forEach(Alarm::checkAlarm);
9192
}
9293

9394
@EventListener
9495
public void handleStudyInviteEvent(StudyInviteEvent event) {
9596
saveAlarm(
96-
event.targetUserId(),
97-
AlarmType.INVITE,
98-
DomainType.STUDY,
99-
event.studyId()
97+
event.targetUserId(),
98+
AlarmType.INVITE,
99+
DomainType.STUDY,
100+
event.studyId()
100101
);
101102
}
102103

@@ -120,36 +121,39 @@ public void rejectInvite(Long alarmId) {
120121

121122
@EventListener
122123
public void handleStudyExtendEvent(StudyExtendEvent event) {
123-
List<StudyMember> members = studyMemberRepository.findAllByStudyIdAndActivatedTrue(event.studyId());
124+
List<StudyMember> members = studyMemberRepository.findAllByStudyIdAndActivatedTrue(
125+
event.studyId());
124126

125127
for (StudyMember member : members) {
126128
if (!member.isLeader()) {
127129
saveAlarm(
128-
member.getUserId(),
129-
AlarmType.STUDY_EXTEND,
130-
DomainType.STUDY,
131-
event.studyId()
130+
member.getUserId(),
131+
AlarmType.STUDY_EXTEND,
132+
DomainType.STUDY,
133+
event.studyId()
132134
);
133135
}
134136
}
135137
}
136138

137139
@EventListener
138140
public void handleStudyExtensionReminderEvent(StudyExtensionReminderEvent event) {
139-
StudyMember leader = studyMemberRepository.findByStudyIdAndRoleAndActivatedTrue(event.studyId(), StudyMemberRole.LEADER)
140-
.orElseThrow(() -> new BusinessException(STUDY_LEADER_NOT_FOUND));
141+
StudyMember leader = studyMemberRepository.findByStudyIdAndRoleAndActivatedTrue(
142+
event.studyId(), StudyMemberRole.LEADER)
143+
.orElseThrow(() -> new BusinessException(STUDY_LEADER_NOT_FOUND));
141144

142145
saveAlarm(
143-
leader.getUserId(),
144-
AlarmType.STUDY_EXTENSION_REMINDER,
145-
DomainType.STUDY,
146-
event.studyId()
146+
leader.getUserId(),
147+
AlarmType.STUDY_EXTENSION_REMINDER,
148+
DomainType.STUDY,
149+
event.studyId()
147150
);
148151
}
149152

150153
@EventListener
151154
public void handleTimeVotePeriodCreatedEvent(TimeVotePeriodCreatedEvent event) {
152-
List<StudyMember> members = studyMemberRepository.findAllByStudyIdAndActivatedTrue(event.studyId());
155+
List<StudyMember> members = studyMemberRepository.findAllByStudyIdAndActivatedTrue(
156+
event.studyId());
153157

154158
for (StudyMember member : members) {
155159
if (!member.getUserId().equals(event.excludedUserId())) {
@@ -190,12 +194,13 @@ public void handleApplicationStatusChangedEvent(ApplicationStatusChangedEvent ev
190194
}
191195

192196
private Alarm findValidAlarm(Long alarmId) {
193-
return alarmRepository.findById(alarmId).orElseThrow(() -> new NotFoundException(AlarmErrorCode.ALARM_NOT_FOUND));
197+
return alarmRepository.findById(alarmId)
198+
.orElseThrow(() -> new NotFoundException(AlarmErrorCode.ALARM_NOT_FOUND));
194199
}
195200

196201
private Study findValidStudy(Long studyId) {
197202
return studyRepository.findById(studyId)
198-
.orElseThrow(() -> new NotFoundException(STUDY_NOT_FOUND));
203+
.orElseThrow(() -> new NotFoundException(STUDY_NOT_FOUND));
199204
}
200205

201206
private void validateParticipantStudyLimit(Long userId) {

0 commit comments

Comments
 (0)