Skip to content

Commit 09d658f

Browse files
authored
Merge pull request #136 from CommitField/feat/#81-1
feat : ์•Œ๋ฆผ ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ ๋ฐ ํ”„๋ก ํŠธ ์—ฐ๋™ ์™„๋ฃŒ
2 parents a910ca7 + a879b8b commit 09d658f

File tree

7 files changed

+29
-109
lines changed

7 files changed

+29
-109
lines changed

โ€Žsrc/main/java/cmf/commitField/domain/noti/noti/controller/ApiV1NotiController.java

+8-17
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
import cmf.commitField.global.error.ErrorCode;
88
import cmf.commitField.global.exception.CustomException;
99
import cmf.commitField.global.globalDto.GlobalResponse;
10-
import cmf.commitField.global.websocket.NotiWebSocketHandler;
1110
import lombok.RequiredArgsConstructor;
1211
import lombok.extern.slf4j.Slf4j;
12+
import org.springframework.context.ApplicationEventPublisher;
1313
import org.springframework.security.core.Authentication;
14+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1415
import org.springframework.security.core.context.SecurityContextHolder;
1516
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
1617
import org.springframework.security.oauth2.core.user.OAuth2User;
@@ -30,24 +31,14 @@ public class ApiV1NotiController {
3031
private final NotiService notiService;
3132
private final UserRepository userRepository;
3233
private final NotiWebSocketHandler notiWebSocketHandler;
34+
private final ApplicationEventPublisher eventPublisher;
3335

3436
@GetMapping("")
35-
public GlobalResponse<List<NotiDto>> getNoti() {
36-
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
37-
38-
if (authentication instanceof OAuth2AuthenticationToken) {
39-
OAuth2User principal = (OAuth2User) authentication.getPrincipal();
40-
Map<String, Object> attributes = principal.getAttributes();
41-
String username = (String) attributes.get("login"); // GitHub ID
42-
User user = userRepository.findByUsername(username).orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));
43-
List<NotiDto> notis = notiService.getNotReadNoti(user);
44-
// ์›น์†Œ์ผ“์œผ๋กœ ์•Œ๋ฆผ ์ „์†ก
45-
notiWebSocketHandler.sendNotification(user, notis);
46-
47-
return GlobalResponse.success(notis);
48-
}
49-
50-
return GlobalResponse.error(ErrorCode.LOGIN_REQUIRED);
37+
public GlobalResponse<List<NotiDto>> getNoti(@AuthenticationPrincipal OAuth2User oAuth2User) {
38+
String username = oAuth2User.getName();
39+
User user = userRepository.findByUsername(username).orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));
40+
List<NotiDto> notis = notiService.getNotReadNoti(user);
41+
return GlobalResponse.success(notis);
5142
}
5243

5344
@PostMapping("")
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package cmf.commitField.domain.noti.noti.event;
22

3+
import cmf.commitField.domain.noti.noti.dto.NotiDto;
34
import lombok.Getter;
45
import org.springframework.context.ApplicationEvent;
56

7+
import java.util.List;
8+
69
@Getter
710
public class NotiEvent extends ApplicationEvent {
811
private final String username;
12+
private final List<NotiDto> notis;
913
private final String message;
1014

11-
public NotiEvent(Object source, String username, String message) {
15+
public NotiEvent(Object source, String username, List<NotiDto> notis, String message) {
1216
super(source);
1317
this.username = username;
18+
this.notis = notis;
1419
this.message = message;
1520
}
1621
}

โ€Žsrc/main/java/cmf/commitField/domain/noti/noti/event/NotiListener.java

+4
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22

33
import lombok.RequiredArgsConstructor;
44
import org.springframework.context.event.EventListener;
5+
import org.springframework.messaging.simp.SimpMessagingTemplate;
56
import org.springframework.stereotype.Component;
67

78
@Component
89
@RequiredArgsConstructor
910
public class NotiListener {
11+
private final SimpMessagingTemplate messagingTemplate;
1012
@EventListener
1113
public void handleNotiEvent(NotiEvent event) {
14+
String username = event.getUsername();
1215
System.out.println("NotiEvent: " + event.getMessage());
16+
messagingTemplate.convertAndSend("/topic/notifications/" + username, event.getNotis());
1317
}
1418
}

โ€Žsrc/main/java/cmf/commitField/domain/noti/noti/service/NotiService.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import cmf.commitField.domain.noti.noti.entity.NotiDetailType;
66
import cmf.commitField.domain.noti.noti.entity.NotiMessageTemplates;
77
import cmf.commitField.domain.noti.noti.entity.NotiType;
8+
import cmf.commitField.domain.noti.noti.event.NotiEvent;
89
import cmf.commitField.domain.noti.noti.repository.NotiRepository;
910
import cmf.commitField.domain.season.entity.Season;
1011
import cmf.commitField.domain.user.entity.User;
@@ -13,10 +14,12 @@
1314
import cmf.commitField.global.exception.CustomException;
1415
import lombok.RequiredArgsConstructor;
1516
import lombok.extern.slf4j.Slf4j;
17+
import org.springframework.context.ApplicationEventPublisher;
1618
import org.springframework.stereotype.Service;
1719
import org.springframework.transaction.annotation.Transactional;
1820

1921
import java.text.MessageFormat;
22+
import java.util.ArrayList;
2023
import java.util.List;
2124

2225
@Service
@@ -26,6 +29,7 @@
2629
public class NotiService {
2730
private final NotiRepository notiRepository;
2831
private final UserRepository userRepository;
32+
private final ApplicationEventPublisher eventPublisher;
2933

3034
// ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ
3135
public static String generateMessage(NotiDetailType type, Object... params) {
@@ -46,7 +50,12 @@ public void createNoti(User receiver) {
4650
.isRead(false)
4751
.message(message)
4852
.build();
49-
notiRepository.save(noti);
53+
54+
List<NotiDto> notis = new ArrayList<>();
55+
Noti savedNoti = notiRepository.save(noti);
56+
notis.add(new NotiDto(savedNoti.getId(), savedNoti.getMessage(), savedNoti.getCreatedAt()));
57+
NotiEvent event = new NotiEvent(this, receiver.getUsername(), notis, "์ƒˆ๋กœ์šด ์•Œ๋ฆผ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
58+
eventPublisher.publishEvent(event);
5059
}
5160

5261

โ€Žsrc/main/java/cmf/commitField/global/scheduler/NotiTestScheduler.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@ public class NotiTestScheduler {
1717
private final UserRepository userRepository;
1818
private final ApplicationEventPublisher eventPublisher;
1919

20-
@Scheduled(cron = "30 14 * * * *")
20+
// @Scheduled(cron = "30 2 * * * *")
2121
public void test() {
2222
System.out.println("test ์‹คํ–‰");
2323

2424
User user = userRepository.findById(1L).orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));
2525
notiService.createNoti(user);
26-
// eventPublisher.publishEvent();
2726
}
2827
}

โ€Žsrc/main/java/cmf/commitField/global/websocket/NotiWebSocketHandler.java

-83
This file was deleted.

โ€Žsrc/main/java/cmf/commitField/global/websocket/WebSocketConfig.java

-5
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,11 @@
1212
public class WebSocketConfig implements WebSocketConfigurer {
1313

1414
private final ChatWebSocketHandler chatWebSocketHandler;
15-
private final NotiWebSocketHandler notiWebSocketHandler;
1615

1716
@Override
1817
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
1918
// ์ฑ„ํŒ… ์›น์†Œ์ผ“ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
2019
registry.addHandler(chatWebSocketHandler, "/chat-rooms")
2120
.setAllowedOrigins("*"); // CORS ์„ค์ •, ์‹ค์ œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณด์•ˆ์„ ์œ„ํ•ด ์ œํ•œ์ ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•จ
22-
23-
// ์•Œ๋ฆผ ์›น์†Œ์ผ“ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
24-
registry.addHandler(notiWebSocketHandler, "/notifications")
25-
.setAllowedOrigins("*");
2621
}
2722
}

0 commit comments

Comments
ย (0)