-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathNotificationSettingService.java
More file actions
58 lines (49 loc) · 2.8 KB
/
NotificationSettingService.java
File metadata and controls
58 lines (49 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.gamzabat.algohub.feature.notification.service;
import java.util.List;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.gamzabat.algohub.feature.group.studygroup.domain.GroupMember;
import com.gamzabat.algohub.feature.group.studygroup.domain.StudyGroup;
import com.gamzabat.algohub.feature.group.studygroup.exception.CannotFoundGroupException;
import com.gamzabat.algohub.feature.group.studygroup.exception.GroupMemberValidationException;
import com.gamzabat.algohub.feature.group.studygroup.repository.GroupMemberRepository;
import com.gamzabat.algohub.feature.group.studygroup.repository.StudyGroupRepository;
import com.gamzabat.algohub.feature.notification.domain.NotificationSetting;
import com.gamzabat.algohub.feature.notification.dto.EditNotificationSettingRequest;
import com.gamzabat.algohub.feature.notification.dto.GetNotificationSettingResponse;
import com.gamzabat.algohub.feature.notification.exception.CannotFoundNotificationSettingException;
import com.gamzabat.algohub.feature.notification.repository.NotificationSettingRepository;
import com.gamzabat.algohub.feature.user.domain.User;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
public class NotificationSettingService {
private final NotificationSettingRepository notificationSettingRepository;
private final GroupMemberRepository groupMemberRepository;
private final StudyGroupRepository studyGroupRepository;
@Transactional(readOnly = true)
public List<GetNotificationSettingResponse> getNotificationSettings(User user) {
List<NotificationSetting> settings = notificationSettingRepository.findAllByUser(user);
return settings.stream().map(GetNotificationSettingResponse::toDTO).toList();
}
@Transactional
public void editNotificationSettings(User user, EditNotificationSettingRequest request) {
StudyGroup studyGroup = studyGroupRepository.findById(request.groupId())
.orElseThrow(() -> new CannotFoundGroupException("존재하지 않는 스터디 그룹입니다."));
GroupMember member = groupMemberRepository.findByUserAndStudyGroup(user, studyGroup)
.orElseThrow(() -> new GroupMemberValidationException(HttpStatus.FORBIDDEN.value(), "참여하지 않은 스터디 그룹입니다."));
NotificationSetting setting = notificationSettingRepository.findByMember(member)
.orElseThrow(() -> new CannotFoundNotificationSettingException("알림 설정 정보를 가져올 수 없습니다."));
setting.editSettings(request.allNotifications(),
request.newProblem(),
request.newSolution(),
request.newComment(),
request.newMember(),
request.deadlineReached()
);
log.info("success to edit notification settings user_id = {}", user.getId());
}
}