Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.TwoSeaU.BaData.domain.sos.dto.response;

import java.time.LocalDateTime;

import com.TwoSeaU.BaData.domain.sos.entity.Sos;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class ConnectSseResponse {
private Long sosId;
private Long requesterId;
private Long responderId;
private String type;
private LocalDateTime createdAt;

public static ConnectSseResponse of(final Sos sos, final String type) {
return ConnectSseResponse.builder()
.sosId(sos.getId())
.requesterId(sos.getRequester().getId())
.responderId(sos.getResponder() != null ? sos.getResponder().getId() : null)
.type(type)
.createdAt(sos.getCreatedAt())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import org.springframework.stereotype.Service;

import com.TwoSeaU.BaData.domain.sos.dto.response.ConnectSseResponse;
import com.TwoSeaU.BaData.domain.sos.dto.response.RespondSosResponse;
import com.TwoSeaU.BaData.domain.sos.dto.response.SaveSosResponse;
import com.TwoSeaU.BaData.domain.sos.entity.Sos;
Expand Down Expand Up @@ -46,7 +47,8 @@ public SaveSosResponse requestSos(final String username) {

final Sos savedSos = sosRepository.save(Sos.of(user));

sseService.broadcast(sosMessage);
final ConnectSseResponse connectSseResponse = ConnectSseResponse.of(savedSos, "SOS_REQUEST");
sseService.broadcast(connectSseResponse);

return SaveSosResponse.of(savedSos.getId());
}
Expand All @@ -61,8 +63,8 @@ public RespondSosResponse respondSos(final Long sosId, final String username) {
final Boolean isSuccess = sos.respond(user);

if(isSuccess) {
sseService.sendToClient(sos.getRequester().getId(), "누군가 요청을 수락하였습니다.");
sseService.sendToClient(user.getId(), "SOS 요청을 수락하였습니다.");
final ConnectSseResponse connectSseResponse = ConnectSseResponse.of(sos, "SOS_RESPOND");
sseService.broadcast(connectSseResponse);
}

return RespondSosResponse.of(sos.getId(), isSuccess);
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/com/TwoSeaU/BaData/global/sse/SseService.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import com.TwoSeaU.BaData.domain.sos.dto.response.ConnectSseResponse;
import com.TwoSeaU.BaData.domain.sos.exception.SosException;
import com.TwoSeaU.BaData.domain.user.entity.User;
import com.TwoSeaU.BaData.domain.user.exception.UserException;
Expand Down Expand Up @@ -39,7 +40,7 @@ public SseEmitter subscribe(final String username) {
return sseEmitter;
}

public void sendToClient(final Long userId, String message) {
public void sendToClient(final Long userId, Object message) {
final SseEmitter sseEmitter = emitterMap.get(userId);

if(sseEmitter != null) {
Expand All @@ -55,12 +56,12 @@ public void sendToClient(final Long userId, String message) {
}
}

public void broadcast(final String sosMessage) {
public void broadcast(final ConnectSseResponse connectSseResponse) {
final List<Long> userIds = new ArrayList<>(emitterMap.keySet());
final List<User> users = userRepository.findAllById(userIds);

users.stream()
.filter(User::getIsNotificationEnabled)
.forEach(user -> sendToClient(user.getId(), sosMessage));
.forEach(user -> sendToClient(user.getId(), connectSseResponse));
}
}