Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 격파르타합격후기
- 항해15기
- 격파르타후기
- java기본자료형
- java알고리즘
- java최솟값구하기
- java참조자료형
- java set 출력
- java list 저장
- 인터프린터언어
- java 자료구조 활용
- java set 저장
- javaJRE
- 컴파일
- sqld자격증합격
- java list 출력
- 비전공자sqld
- 프로그래머스제일작은수
- 노베이스부트캠프
- javaJVM
- java map 출력
- java알고리즘문제풀이
- 작은수제거하기
- 프로그래머스
- 격파르타비전공자
- 항해99후기
- java map
- 코딩부트캠프후기
- 격파르타장점
- java map 저장
Archives
- Today
- Total
코딩과 결혼합니다
230830 - 알림기능 구현하기(해시태그 구독하기/ 알림 구독하기) 본문
728x90
해시태그 구독 기능

해시태그 알림을 등록받을 수 있게 만들어 보겠다! 해시태그 개수 제한은 프런트 쪽에서 걸어주고 나는 저 해시태그를 받아와서 DB에 저장을 해 놓으면 된다. + 삭제하는 것까지!
AlarmController
//해시태그 구독
@PostMapping("/hashtag")
public MessageResponseDto subscribeHashtag(@RequestParam String hashtag,
@AuthenticationPrincipal UserDetailsImpl userDetails){
Long userId = userDetails.getUser().getId();
return alarmService.subscribeHashtag(hashtag, userId);
}
입력값으로 사용자가 보낸 hashtag와 그리고 그 유저의 정보를 토큰으로 받아온다!
AlarmService
//해시 태그 구독
public MessageResponseDto subscribeHashtag(String hashtag, Long userId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new IllegalArgumentException("사용자가 존재하지 않습니다."));
SubscribeHashtag subscribeHashtag = new SubscribeHashtag(user, hashtag);
subscribeHashtagRepository.save(subscribeHashtag);
return new MessageResponseDto("해시태그 구독 완료");
}
유저를 확인한 다음에 해시태그구독 repository에 저장. 매우 간단하죵
@Entity
@Getter
@Setter
@Table(name = "sub_hashtag")
@NoArgsConstructor
public class SubscribeHashtag {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "sub_hashtag_id")
private Long Id;
@Column(nullable = false)
private String hashtag;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
public SubscribeHashtag(User user, String hashtag) {
this.user = user;
this.hashtag = hashtag;
}
}
어떤 유저가 어떤 해시태그를 구독했는지 구분해야 하므로 User entity와 연관관계를 맺어줌! (단방향으로)
📌 결과

DB에 잘 저장되었습니다!
알림 구독 기능

이 부분은 SSE와 관련이 있겠다! 자신이 푸시 알림 받고 싶은 걸 모두/ 혹은 각각 골라서 받을 수 있도록 구현할 것이다.
boolean 타입을 이용해서 구독을 안 했을 때는 false, 구독했을 때는 true로 바꿔준다.
AlarmController
//알림 구독
@PostMapping("/subscribe")
public MessageResponseDto subscribeAlarm(@RequestParam AlarmType alarmType,
@AuthenticationPrincipal UserDetailsImpl userDetails){
Long userId = userDetails.getUser().getId();
return alarmService.subscribeAlarm(alarmType,userId);
}
프런트에서 alarmType을 받을 것이다. 댓글인지 좋아요인지 해시태그인지 아니면 전체인지.
AlarmService
//알림 구독
@Transactional
public MessageResponseDto subscribeAlarm(AlarmType alarmType, Long userId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new IllegalArgumentException("사용자가 존재하지 않습니다."));
if (alarmType.equals(AlarmType.LIKE)) {
user.changeLikeAlarm();
} else if (alarmType.equals(AlarmType.COMMENT)) {
user.changeCommentAlarm();
} else if (alarmType.equals(AlarmType.HASHTAG)) {
user.changeHashtagAlarm();
}
return new MessageResponseDto(alarmType + " 구독이 변경 완료되었습니다.");
}
======================================================================================
User(entity) ++추가
private boolean likeAlarm;
private boolean commentAlarm;
private boolean hashtagAlarm;
public void changeLikeAlarm() {this.likeAlarm = !this.likeAlarm;}
public void changeCommentAlarm() {this.commentAlarm = !this.commentAlarm;}
public void changeHashtagAlarm() {this.hashtagAlarm = !this.hashtagAlarm;}
그리고 토글로 AlarmType에 따라 true/ false로 바꿔준다.
public enum AlarmType {
COMMENT,
LIKE,
HASHTAG
}
나는 알람 타입을 좀 더 세분화했다.
@Getter
public enum AlarmEventType {
NEW_COMMENT_ON_POST(AlarmType.COMMENT),
NEW_RECOMMENT_ON_POST(AlarmType.COMMENT),
NEW_LIKE_ON_POST(AlarmType.LIKE),
NEW_LIKE_ON_COMMENT(AlarmType.LIKE),
NEW_LIKE_ON_RECOMMENT(AlarmType.LIKE),
NEW_POST_WITH_HASHTAG(AlarmType.HASHTAG)
;
private final AlarmType alarmType;
AlarmEventType (AlarmType alarmType){
this.alarmType = alarmType;
}
public AlarmType getAlarmType(){
return this.alarmType;
}
}
[알람 이벤트 타입]으로 새로운 댓글과 대댓글에 대한 것,
게시글, 댓글, 대댓글에서 각각 좋아요가 왔을 때도 [알람 이벤트 타입]으로 세세하게 나누어주었다.
그리고 공통된 특징을 가진 것들끼리 하나의 [알람타입]으로 묶어줌!
댓글 알림을 구독하면 자신의 포스트에 댓글이 달린건지, 아니면 자신의 댓글에 대댓글이 달린건지 구분할 수 있다!
📌 결과

각 유저마다 어떤걸 구독했는지 구분할 수 있다~
'코딩과 매일매일♥ > Seoulvival' 카테고리의 다른 글
| 230901 - Spring 의 BufferedImage로 S3 이미지 리사이징하기 (0) | 2023.09.01 |
|---|---|
| 230831 - 알림기능 구현하기(isRead true로 바꾸기 / SSE 연결하기 ) (0) | 2023.08.31 |
| 230829 - 알림기능 구현하기(알림 리스트) (0) | 2023.08.29 |
| 230828 - 스크랩 기능 (0) | 2023.08.29 |
| 230826 - 댓글 + 대댓글 좋아요 기능 구현 (1) | 2023.08.26 |