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
2 changes: 2 additions & 0 deletions src/main/java/umc/th/juinjang/JuinjangApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.FeignAutoConfiguration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableJpaAuditing
@EnableAsync
@ImportAutoConfiguration({FeignAutoConfiguration.class})
public class JuinjangApplication {

Expand Down
13 changes: 13 additions & 0 deletions src/main/java/umc/th/juinjang/event/SignUpEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package umc.th.juinjang.event;

import umc.th.juinjang.model.entity.enums.MemberProvider;

public record SignUpEvent(
MemberProvider memberProvider,
String name,
long count
) {
public static SignUpEvent of(MemberProvider memberProvider, String name, long count) {
return new SignUpEvent(memberProvider, name, count);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package umc.th.juinjang.event.publisher;

import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import umc.th.juinjang.event.SignUpEvent;
import umc.th.juinjang.model.entity.Member;

@RequiredArgsConstructor
@Component
public class ApplicationMemberEventPublisherAdapter implements MemberEventPublisher {

private final ApplicationEventPublisher applicationEventPublisher;

@Override
public void publishSignUpEvent(Member member) {
applicationEventPublisher.publishEvent(SignUpEvent.of(member.getProvider(), member.getNickname(), member.getMemberId()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package umc.th.juinjang.event.publisher;

import umc.th.juinjang.model.entity.Member;

public interface MemberEventPublisher {
void publishSignUpEvent(Member member);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package umc.th.juinjang.event.subscriber;

import lombok.RequiredArgsConstructor;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;
import umc.th.juinjang.event.SignUpEvent;
import umc.th.juinjang.external.discord.DiscordAlertProvider;

@Component
@RequiredArgsConstructor
public class DiscordEventListener {

private final DiscordAlertProvider discordAlertProvider;
private final Environment environment;

@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
@Async
public void handleSignUpEvent (SignUpEvent event){
if (isProdEnv()) {
discordAlertProvider.sendAlertToDiscord(String.format(EventMessage.SIGN_UP_MESSAGE.getMessage(), event.memberProvider(), event.count(), event.name()));
}
}

private boolean isProdEnv() {
return environment.acceptsProfiles(Profiles.of("prod"));
}
}
13 changes: 13 additions & 0 deletions src/main/java/umc/th/juinjang/event/subscriber/EventMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package umc.th.juinjang.event.subscriber;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public enum EventMessage {
SIGN_UP_MESSAGE("주인장에 %s %d번째 유저 < %s >님이 생겼어요!");

private final String message;
}
Original file line number Diff line number Diff line change
@@ -1,34 +1,23 @@
package umc.th.juinjang.external.discord;

import feign.FeignException;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import umc.th.juinjang.apiPayload.code.status.ErrorStatus;
import umc.th.juinjang.external.discord.dto.DiscordAlert;
import umc.th.juinjang.model.entity.Member;

@RequiredArgsConstructor
@Component
@Slf4j
public class DiscordAlertProvider {

private final DiscordFeignClient discordFeignClient;
private final Environment environment;

public void sendAlert(Member member) {
if (Arrays.asList(environment.getActiveProfiles()).contains("prod")) {
sendAlertToDiscord(DiscordAlert.createAlert(member.getMemberId(), member.getProvider(), member.getNickname()));
}
}

private void sendAlertToDiscord(DiscordAlert discordAlert) {
public void sendAlertToDiscord(String content) {
try {
discordFeignClient.sendAlert(discordAlert);
discordFeignClient.sendAlert(DiscordAlert.createAlert(content));
} catch (FeignException e) {
log.info(ErrorStatus.DISCORD_ALERT_ERROR.getMessage()+ " " +e.getMessage());
log.info(StatusMessage.DISCORD_ALERT_ERROR.getMessage()+ " " +e.getMessage());
}
}
}
14 changes: 14 additions & 0 deletions src/main/java/umc/th/juinjang/external/discord/StatusMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package umc.th.juinjang.external.discord;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public enum StatusMessage {
DISCORD_ALERT_ERROR("discord 알림 수신 중 오류가 발생했습니다."),
DISCORD_ALERT_SUCCESS("discord 알림 수신 성공했습니다.");

private final String message;
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package umc.th.juinjang.external.discord.dto;

import umc.th.juinjang.model.entity.enums.MemberProvider;

public record DiscordAlert(String content) {
public static DiscordAlert createAlert(Long id, MemberProvider memberProvider, String nickname) {
return new DiscordAlert("주인장에 " +memberProvider+" "+id+"번째 유저 < "+nickname+" >님이 생겼어요!");
public static DiscordAlert createAlert(String content) {
return new DiscordAlert(content);
}
}
12 changes: 8 additions & 4 deletions src/main/java/umc/th/juinjang/service/auth/OAuthService.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import umc.th.juinjang.apiPayload.ExceptionHandler;
import umc.th.juinjang.apiPayload.exception.handler.MemberHandler;
import umc.th.juinjang.controller.KakaoUnlinkClient;
import umc.th.juinjang.external.discord.DiscordAlertProvider;
import umc.th.juinjang.event.publisher.MemberEventPublisher;
import umc.th.juinjang.model.dto.auth.LoginResponseDto;
import umc.th.juinjang.model.dto.auth.TokenDto;
import umc.th.juinjang.model.dto.auth.apple.*;
Expand Down Expand Up @@ -50,7 +50,6 @@ public class OAuthService {
private final JwtService jwtService;
private final AppleClientSecretGenerator appleClientSecretGenerator;
private final AppleOAuthProvider appleOAuthProvider;
private final DiscordAlertProvider discordAlertProvider;
private final ScrapRepository scrapRepository;
private final LimjangRepository limjangRepository;
private final ChecklistAnswerRepository checklistAnswerRepository;
Expand All @@ -59,6 +58,7 @@ public class OAuthService {
private final ReportRepository reportRepository;
private final S3Service s3Service;
private final LimjangPriceRepository limjangPriceRepository;
private final MemberEventPublisher memberEventPublisher;

@Autowired
private KakaoUnlinkClient kakaoUnlinkClient;
Expand Down Expand Up @@ -151,10 +151,14 @@ public LoginResponseDto kakaoSignUp (Long targetId, KakaoSignUpRequestDto kakaoS
}

// accessToken, refreshToken 발급 후 반환
discordAlertProvider.sendAlert(member);
publishDiscordAlert(member);
return createToken(member);
}

private void publishDiscordAlert(Member member) {
memberEventPublisher.publishSignUpEvent(member);
}

// accessToken, refreshToken 발급
@Transactional
public LoginResponseDto createToken(Member member) {
Expand Down Expand Up @@ -300,7 +304,7 @@ public LoginResponseDto appleSignUp(AppleSignUpRequestDto appleSignUpRequestDto)
if(member == null)
throw new MemberHandler(FAILED_TO_LOGIN);

discordAlertProvider.sendAlert(member);
publishDiscordAlert(member);
return createToken(member);
}

Expand Down