Skip to content

Commit 63e2440

Browse files
committed
refactor: 구독 생성 조회 시 알림 채널을 포함하도록 변경
1 parent 6665ea9 commit 63e2440

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

src/main/java/ksh/backendserver/subscription/dto/request/SubscriptionCreationRequestDto.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package ksh.backendserver.subscription.dto.request;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotEmpty;
5+
import ksh.backendserver.notification.enums.NotificationType;
46
import lombok.AllArgsConstructor;
57
import lombok.Getter;
68

@@ -19,4 +21,8 @@ public class SubscriptionCreationRequestDto {
1921

2022
@Schema(description = "구독할 직군 ID 목록", example = "[1, 2, 3]")
2123
private List<Long> positionIds;
24+
25+
@NotEmpty(message = "알림 수단을 최소 1개 이상 선택해야 합니다.")
26+
@Schema(description = "알림 수단 목록 (EMAIL, SLACK)", example = "[\"EMAIL\", \"SLACK\"]")
27+
private List<NotificationType> notificationTypes;
2228
}

src/main/java/ksh/backendserver/subscription/dto/response/SubscriptionResponseDto.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ksh.backendserver.subscription.dto.response;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import ksh.backendserver.notification.enums.NotificationType;
45
import lombok.AllArgsConstructor;
56
import lombok.Getter;
67

@@ -20,7 +21,15 @@ public class SubscriptionResponseDto {
2021
@Schema(description = "구독 중인 직군 이름 목록", example = "[\"백엔드 개발자\", \"프론트엔드 개발자\"]")
2122
private List<String> positionNames;
2223

23-
public static SubscriptionResponseDto of(List<String> companyNames, List<String> skillNames, List<String> positionNames) {
24-
return new SubscriptionResponseDto(companyNames, skillNames, positionNames);
24+
@Schema(description = "알림 수단 목록", example = "[\"EMAIL\", \"SLACK\"]")
25+
private List<NotificationType> channels;
26+
27+
public static SubscriptionResponseDto of(
28+
List<String> companyNames,
29+
List<String> skillNames,
30+
List<String> positionNames,
31+
List<NotificationType> notificationTypes
32+
) {
33+
return new SubscriptionResponseDto(companyNames, skillNames, positionNames, notificationTypes);
2534
}
26-
}
35+
}

src/main/java/ksh/backendserver/subscription/service/SubscriptionService.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import ksh.backendserver.group.entity.SubscriptionPosition;
99
import ksh.backendserver.group.repository.PositionRepository;
1010
import ksh.backendserver.group.repository.SubscriptionPositionRepository;
11+
import ksh.backendserver.notification.entity.NotificationPreference;
12+
import ksh.backendserver.notification.repository.NotificationPreferenceRepository;
1113
import ksh.backendserver.post.model.PostSkillRequirement;
1214
import ksh.backendserver.skill.entity.Skill;
1315
import ksh.backendserver.skill.entity.SubscriptionSkill;
@@ -35,6 +37,7 @@ public class SubscriptionService {
3537
private final SubscriptionSkillRepository subscriptionSkillRepository;
3638
private final SubscriptionPositionRepository subscriptionPositionRepository;
3739
private final SubscriptionCompanyRepository subscriptionCompanyRepository;
40+
private final NotificationPreferenceRepository notificationPreferenceRepository;
3841

3942
private final CompanyRepository companyRepository;
4043
private final SkillRepository skillRepository;
@@ -65,26 +68,38 @@ public void save(SubscriptionCreationRequestDto request, Long memberId) {
6568
.build())
6669
.toList();
6770

71+
List<NotificationPreference> notificationPreferences = request.getNotificationTypes()
72+
.stream()
73+
.map(notificationType -> NotificationPreference.builder()
74+
.memberId(memberId)
75+
.notificationType(notificationType)
76+
.build())
77+
.toList();
78+
6879
subscriptionCompanyRepository.saveAll(companies);
6980
subscriptionSkillRepository.saveAll(skills);
7081
subscriptionPositionRepository.saveAll(positions);
82+
notificationPreferenceRepository.saveAll(notificationPreferences);
7183
}
7284

7385
@Transactional
7486
public void cancel(Long memberId) {
7587
List<SubscriptionCompany> companies = subscriptionCompanyRepository.findByUserId(memberId);
7688
List<SubscriptionSkill> skills = subscriptionSkillRepository.findByUserId(memberId);
7789
List<SubscriptionPosition> positions = subscriptionPositionRepository.findByUserId(memberId);
90+
List<NotificationPreference> notificationPreferences = notificationPreferenceRepository.findByMemberId(memberId);
7891

7992
subscriptionCompanyRepository.deleteAll(companies);
8093
subscriptionSkillRepository.deleteAll(skills);
8194
subscriptionPositionRepository.deleteAll(positions);
95+
notificationPreferenceRepository.deleteAll(notificationPreferences);
8296
}
8397

8498
public SubscriptionResponseDto findByMemberId(Long memberId) {
8599
List<SubscriptionCompany> subscriptionCompanies = subscriptionCompanyRepository.findByUserId(memberId);
86100
List<SubscriptionSkill> subscriptionSkills = subscriptionSkillRepository.findByUserId(memberId);
87101
List<SubscriptionPosition> subscriptionPositions = subscriptionPositionRepository.findByUserId(memberId);
102+
List<NotificationPreference> notificationPreferences = notificationPreferenceRepository.findByMemberId(memberId);
88103

89104
List<Long> companyIds = subscriptionCompanies.stream()
90105
.map(SubscriptionCompany::getCompanyId)
@@ -114,7 +129,11 @@ public SubscriptionResponseDto findByMemberId(Long memberId) {
114129
.map(Position::getName)
115130
.toList();
116131

117-
return SubscriptionResponseDto.of(companyNames, skillNames, positionNames);
132+
var notificationTypes = notificationPreferences.stream()
133+
.map(NotificationPreference::getNotificationType)
134+
.toList();
135+
136+
return SubscriptionResponseDto.of(companyNames, skillNames, positionNames, notificationTypes);
118137
}
119138

120139
public Map<UserSubscription, List<PostSkillRequirement>> findMatchingSubscription(

0 commit comments

Comments
 (0)