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
Expand Up @@ -14,7 +14,6 @@
import com.sillim.recordit.member.domain.Member;
import com.sillim.recordit.pushalarm.dto.PushMessage;
import com.sillim.recordit.pushalarm.service.AlarmService;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Base64;
import java.util.Optional;
Expand Down Expand Up @@ -75,8 +74,7 @@ public InviteLink searchInviteInfo(String inviteCode) {
new String(Base64.getUrlDecoder().decode(inviteCode)));
}

public void inviteMember(Long calendarId, Long invitedMemberId, Member inviter)
throws IOException {
public void inviteMember(Long calendarId, Long invitedMemberId, Member inviter) {
Calendar calendar = calendarQueryService.searchByCalendarId(calendarId);
calendar.validateAuthenticatedMember(inviter.getId());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import com.sillim.recordit.pushalarm.dto.PushMessage;
import com.sillim.recordit.pushalarm.service.AlarmService;
import jakarta.persistence.OptimisticLockException;
import java.io.IOException;
import lombok.RequiredArgsConstructor;
import org.hibernate.StaleObjectStateException;
import org.springframework.orm.ObjectOptimisticLockingFailureException;
Expand All @@ -33,7 +32,7 @@ public class MemberFollowService {
},
maxAttempts = 15,
backoff = @Backoff(delay = 30))
public void follow(Long followerId, Long followedId) throws IOException {
public void follow(Long followerId, Long followedId) {
Member follower = memberQueryService.findByMemberId(followerId);
Member followed = memberQueryService.findByMemberId(followedId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@
import com.google.firebase.messaging.FirebaseMessagingException;
import com.google.firebase.messaging.Message;
import com.google.firebase.messaging.Notification;
import com.sillim.recordit.global.exception.ErrorCode;
import com.sillim.recordit.global.exception.common.ApplicationException;
import com.sillim.recordit.pushalarm.dto.PushMessage;
import com.sillim.recordit.pushalarm.service.AlarmService;
import java.io.IOException;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
Expand Down Expand Up @@ -50,11 +47,6 @@ public void execute(JobExecutionContext context) {
}
});

try {
alarmService.pushAlarm(
-1L, memberId, PushMessage.fromSchedule(scheduleId, title, body));
} catch (IOException e) {
throw new ApplicationException(ErrorCode.UNHANDLED_EXCEPTION, e.getMessage());
}
alarmService.pushAlarm(-1L, memberId, PushMessage.fromSchedule(scheduleId, title, body));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.sillim.recordit.pushalarm.domain.AlarmLog;
import com.sillim.recordit.pushalarm.dto.PushMessage;
import com.sillim.recordit.pushalarm.repository.AlarmLogRepository;
import java.io.IOException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -15,8 +14,7 @@ public class AlarmService {
private final SseEmitterManager sseEmitterManager;
private final AlarmLogRepository alarmLogRepository;

public boolean pushAlarm(Long senderId, Long receiverId, PushMessage message)
throws IOException {
public boolean pushAlarm(Long senderId, Long receiverId, PushMessage message) {
AlarmLog alarmLog =
alarmLogRepository.save(
AlarmLog.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,13 @@
@Slf4j
@Service
public class SseEmitterManager {

private static final Long TIMEOUT = 60L * 60 * 1000;

private final ConcurrentHashMap<Long, SseEmitter> clients = new ConcurrentHashMap<>();

public SseEmitter subscribe(Long memberId) {
SseEmitter emitter = new SseEmitter(Long.MAX_VALUE);
SseEmitter emitter = new SseEmitter(TIMEOUT);
clients.put(memberId, emitter);

emitter.onCompletion(() -> clients.remove(memberId));
Expand All @@ -24,12 +27,18 @@ public SseEmitter subscribe(Long memberId) {
return emitter;
}

public boolean sendToClient(Long memberId, PushMessage message) throws IOException {
public boolean sendToClient(Long memberId, PushMessage message) {
SseEmitter emitter = clients.get(memberId);

if (emitter != null) {
emitter.send(SseEmitter.event().name(message.type().name()).data(message));
return true;
try {
emitter.send(SseEmitter.event().name(message.type().name()).data(message));
return true;
} catch (IOException exception) {
clients.remove(memberId);
emitter.completeWithError(exception);
return false;
}
}
return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

import com.sillim.recordit.pushalarm.dto.AlarmType;
import com.sillim.recordit.pushalarm.dto.PushMessage;
import java.io.IOException;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

Expand All @@ -14,7 +13,7 @@ class SseEmitterManagerTest {

@Test
@DisplayName("sseEmitter로 client에게 message를 보낼 수 있다.")
void sendToClient() throws IOException {
void sendToClient() {
long memberId = 1L;
sseEmitterManager.subscribe(memberId);

Expand All @@ -27,7 +26,7 @@ void sendToClient() throws IOException {

@Test
@DisplayName("subscribe한 client가 없으면 message를 보낼 수 없다.")
void cantSendToClientIfNotExistsClientSubscribeSseEmitter() throws IOException {
void cantSendToClientIfNotExistsClientSubscribeSseEmitter() {
long memberId = 1L;

boolean result =
Expand Down
Loading