Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mashong Mission Event로 분리 #453

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
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,12 @@
package kr.mashup.branding.service.mashong.dto;

public enum MissionEventType {

APPLY,
SET_TO_VALUE,
;

public boolean isApplyType() {
return this.equals(APPLY);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package kr.mashup.branding.service.mashong.event;


import kr.mashup.branding.domain.mashong.MissionStrategyType;
import kr.mashup.branding.domain.member.MemberGeneration;
import kr.mashup.branding.service.mashong.dto.MissionEventType;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class MashongMissionEvent {

private final MissionStrategyType missionStrategyType;
private final MemberGeneration memberGeneration;
private final Double value;
private final MissionEventType eventType;

public boolean isApplyEvent() {
return eventType.isApplyType();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package kr.mashup.branding.service.mashong.event;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@RequiredArgsConstructor
public class MashongMissionEventPublisher {

private final ApplicationEventPublisher eventPublisher;

public void publish(MashongMissionEvent event) {
eventPublisher.publishEvent(event);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,13 @@ public Executor pushNotiSendThreadPoolTaskExecutor() {
return taskExecutor;
}

@Bean(name = ThreadPoolName.MASHONG_MISSION_THREAD_POOL)
public Executor mashongMissionThreadPoolTaskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(3);
taskExecutor.setMaxPoolSize(30);
taskExecutor.setQueueCapacity(100);
taskExecutor.setThreadNamePrefix("Executor-");
return taskExecutor;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@

public class ThreadPoolName {
public static final String PUSH_NOTI_SEND_THREAD_POOL = "PUSH_NOTI_SEND_THREAD_POOL";
public static final String MASHONG_MISSION_THREAD_POOL = "MASHONG_MISSION_THREAD_POOL";
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package kr.mashup.branding.facade.danggn;

import kr.mashup.branding.domain.danggn.*;
import kr.mashup.branding.domain.danggn.DanggnRankingReward;
import kr.mashup.branding.domain.danggn.DanggnRankingRewardStatus;
import kr.mashup.branding.domain.danggn.DanggnRankingRound;
import kr.mashup.branding.domain.danggn.DanggnScore;
import kr.mashup.branding.domain.danggn.Exception.DanggnRankingRewardAlreadyWrittenException;
import kr.mashup.branding.domain.danggn.Exception.DanggnRankingRewardNotAllowedException;
import kr.mashup.branding.domain.mashong.MissionStrategyType;
Expand All @@ -9,9 +12,11 @@
import kr.mashup.branding.domain.member.Platform;
import kr.mashup.branding.domain.pushnoti.vo.DanggnRewardUpdatedVo;
import kr.mashup.branding.domain.randommessage.RandomMessage;
import kr.mashup.branding.facade.mashong.MashongMissionFacadeService;
import kr.mashup.branding.infrastructure.pushnoti.PushNotiEventPublisher;
import kr.mashup.branding.service.danggn.*;
import kr.mashup.branding.service.mashong.dto.MissionEventType;
import kr.mashup.branding.service.mashong.event.MashongMissionEvent;
import kr.mashup.branding.service.mashong.event.MashongMissionEventPublisher;
import kr.mashup.branding.service.member.MemberService;
import kr.mashup.branding.ui.danggn.response.*;
import kr.mashup.branding.ui.danggn.response.DanggnRankingRoundResponse.DanggnRankingRewardResponse;
Expand Down Expand Up @@ -43,7 +48,7 @@ public class DanggnFacadeService {

private final PushNotiEventPublisher pushNotiEventPublisher;

private final MashongMissionFacadeService mashongMissionFacadeService;
private final MashongMissionEventPublisher mashongMissionEventPublisher;

@Transactional
public DanggnScoreResponse addScore(Long memberGenerationId, Long score) {
Expand All @@ -54,9 +59,18 @@ public DanggnScoreResponse addScore(Long memberGenerationId, Long score) {
danggnScore.addScore(score);
danggnShakeLogService.createLog(memberGeneration, score);

//todo: application event publisher 로 변경
mashongMissionFacadeService.apply(MissionStrategyType.MASHONG_DANGGN_SHAKE_INDIVIDUAL, memberGeneration, score.doubleValue());
mashongMissionFacadeService.apply(MissionStrategyType.MASHONG_DANGGN_SHAKE_TEAM, memberGeneration, score.doubleValue());
mashongMissionEventPublisher.publish(new MashongMissionEvent(
MissionStrategyType.MASHONG_DANGGN_SHAKE_INDIVIDUAL,
memberGeneration,
score.doubleValue(),
MissionEventType.APPLY
));
mashongMissionEventPublisher.publish(new MashongMissionEvent(
MissionStrategyType.MASHONG_DANGGN_SHAKE_TEAM,
memberGeneration,
score.doubleValue(),
MissionEventType.APPLY
));
return DanggnScoreResponse.of(danggnScore.getTotalShakeScore());
}

Expand All @@ -67,7 +81,7 @@ public List<DanggnMemberRankData> getMemberRankList(Integer generationNumber, Lo
}

return danggnScoreService.getDanggnScoreOrderedList(generationNumber, danggnRankingRoundId)
.stream().map(DanggnMemberRankData::from).collect(Collectors.toList());
.stream().map(DanggnMemberRankData::from).collect(Collectors.toList());
}

@Transactional(readOnly = true)
Expand All @@ -80,8 +94,8 @@ public List<DanggnPlatformRankResponse> getPlatformRankList(Integer generationNu

Set<Platform> notExistingPlatforms = getNotExistingPlatforms(existingPlatformRankList);
List<DanggnPlatformRankResponse> notExistingPlatformRankList = notExistingPlatforms.stream()
.map(platform -> DanggnPlatformRankResponse.of(platform, 0L))
.collect(Collectors.toList());
.map(platform -> DanggnPlatformRankResponse.of(platform, 0L))
.collect(Collectors.toList());

return Stream.concat(existingPlatformRankList.stream(), notExistingPlatformRankList.stream()).collect(Collectors.toList());
}
Expand All @@ -100,9 +114,9 @@ public DanggnRandomMessageResponse getRandomTodayMessage() {
public DanggnRankingRoundsResponse getAllRankingRoundByMemberGeneration(Long memberGenerationId) {
final MemberGeneration memberGeneration = memberService.findByMemberGenerationId(memberGenerationId);
List<DanggnRankingRoundsResponse.DanggnRankingRoundSimpleResponse> simpleResponses = danggnRankingRoundService.findPastAndCurrentByGeneration(memberGeneration.getGeneration())
.stream()
.map(DanggnRankingRoundsResponse.DanggnRankingRoundSimpleResponse::from)
.collect(Collectors.toList());
.stream()
.map(DanggnRankingRoundsResponse.DanggnRankingRoundSimpleResponse::from)
.collect(Collectors.toList());
return DanggnRankingRoundsResponse.from(simpleResponses);
}

Expand All @@ -118,15 +132,15 @@ public DanggnRankingRoundResponse getRankingRoundById(Long memberId, Long danggn

@Transactional
public void writeDanggnRankingRewardComment(
Long memberId,
Long danggnRankingRewardId,
String comment
Long memberId,
Long danggnRankingRewardId,
String comment
) {
DanggnRankingReward danggnRankingReward = danggnRankingRewardService.findById(danggnRankingRewardId);
if(danggnRankingReward.getComment() != null) {
if (danggnRankingReward.getComment() != null) {
throw new DanggnRankingRewardAlreadyWrittenException();
}
if(danggnRankingReward.getFirstPlaceRecordMemberId() != memberId) {
if (danggnRankingReward.getFirstPlaceRecordMemberId() != memberId) {
throw new DanggnRankingRewardNotAllowedException();
}
danggnRankingRewardService.writeComment(danggnRankingRewardId, comment);
Expand All @@ -144,15 +158,15 @@ public void writeDanggnRankingRewardComment(

private List<DanggnPlatformRankResponse> getExistingPlatformRankList(Integer generationNumber, Long danggnRankingRoundId) {
return danggnScoreService.getDanggnScorePlatformOrderedList(generationNumber, danggnRankingRoundId).stream()
.map(queryResult -> DanggnPlatformRankResponse.of(queryResult.getPlatform(), queryResult.getTotalScore()))
.collect(Collectors.toList());
.map(queryResult -> DanggnPlatformRankResponse.of(queryResult.getPlatform(), queryResult.getTotalScore()))
.collect(Collectors.toList());
}

private Set<Platform> getNotExistingPlatforms(List<DanggnPlatformRankResponse> existingPlatformRankList) {
Set<Platform> entirePlatforms = Arrays.stream(Platform.values()).collect(Collectors.toSet());
Set<Platform> existingPlatforms = existingPlatformRankList.stream()
.map(DanggnPlatformRankResponse::getPlatform)
.collect(Collectors.toSet());
.map(DanggnPlatformRankResponse::getPlatform)
.collect(Collectors.toSet());
entirePlatforms.removeAll(existingPlatforms);
return entirePlatforms;
}
Expand All @@ -161,7 +175,7 @@ private DanggnRankingRewardResponse getDanggnRankingRewardResponse(Long memberId

final DanggnRankingReward reward = danggnRankingRewardService.findByDanggnRankingRoundOrNull(danggnRankingRound);
final DanggnRankingRewardStatus status =
(reward == null || reward.getFirstPlaceRecordMemberId() == null) ? DanggnRankingRewardStatus.FIRST_PLACE_MEMBER_NOT_EXISTED : reward.getRankingRewardStatus();
(reward == null || reward.getFirstPlaceRecordMemberId() == null) ? DanggnRankingRewardStatus.FIRST_PLACE_MEMBER_NOT_EXISTED : reward.getRankingRewardStatus();

final Member member = status.hasFirstPlaceMember() ? memberService.getActiveOrThrowById(reward.getFirstPlaceRecordMemberId()) : null;
final Boolean isFirstPlaceMember = member != null && Objects.equals(memberId, member.getId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
import kr.mashup.branding.domain.member.Platform;
import kr.mashup.branding.service.mashong.*;
import kr.mashup.branding.service.mashong.dto.LevelUpResult;
import kr.mashup.branding.service.mashong.dto.MissionEventType;
import kr.mashup.branding.service.mashong.event.MashongMissionEvent;
import kr.mashup.branding.service.mashong.event.MashongMissionEventPublisher;
import kr.mashup.branding.service.member.MemberService;
import kr.mashup.branding.ui.mashong.response.MashongFeedResponse;
import kr.mashup.branding.ui.mashong.response.MashongLevelUpResponse;
Expand All @@ -19,22 +22,32 @@
public class MashongFacadeService {

private final MashongAttendanceService mashongAttendanceService;
private final MashongMissionFacadeService mashongMissionFacadeService;
private final MashongPopcornService mashongPopcornService;
private final MashongMissionLogService mashongMissionLogService;
private final MashongMissionTeamLogService mashongMissionTeamLogService;
private final MashongMissionLevelService mashongMissionLevelService;
private final PlatformMashongService platformMashongService;
private final PlatformMashongLevelService platformMashongLevelService;
private final MemberService memberService;
private final MashongMissionEventPublisher mashongMissionEventPublisher;

@Transactional
public Boolean attend(Long memberGenerationId) {
MemberGeneration memberGeneration = memberService.findByMemberGenerationId(memberGenerationId);
Boolean result = mashongAttendanceService.attend(memberGeneration);
if (result) {
mashongMissionFacadeService.apply(MissionStrategyType.MASHONG_ATTENDANCE_INDIVIDUAL, memberGeneration, 1.0);
mashongMissionFacadeService.setToValue(MissionStrategyType.MASHONG_ATTENDANCE_TEAN, memberGeneration, getPlatformAttendStatus(memberGeneration.getPlatform(), memberGeneration.getGeneration()));
mashongMissionEventPublisher.publish(new MashongMissionEvent(
MissionStrategyType.MASHONG_ATTENDANCE_INDIVIDUAL,
memberGeneration,
1.0,
MissionEventType.APPLY
));
mashongMissionEventPublisher.publish(new MashongMissionEvent(
MissionStrategyType.MASHONG_ATTENDANCE_TEAN,
memberGeneration,
getPlatformAttendStatus(memberGeneration.getPlatform(), memberGeneration.getGeneration()),
MissionEventType.SET_TO_VALUE
));
mashongPopcornService.givePopcorn(memberGenerationId, 1L);
}
return result;
Expand Down Expand Up @@ -103,12 +116,12 @@ public MashongFeedResponse feedPopcorn(Long memberGenerationId, Long popcornCoun
platformMashongService.feedPopcorn(platformMashong, popcornCount);
final MashongPopcorn mashongPopcorn = mashongPopcornService.decreasePopcorn(memberGenerationId, popcornCount);

// TODO: event publisher 로 변경
mashongMissionFacadeService.apply(
mashongMissionEventPublisher.publish(new MashongMissionEvent(
MissionStrategyType.MASHONG_POPCORN_INDIVIDUAL,
memberGeneration,
popcornCount.doubleValue()
);
popcornCount.doubleValue(),
MissionEventType.APPLY
));

return MashongFeedResponse.of(true, platformMashong, mashongPopcorn);
}
Expand All @@ -126,13 +139,13 @@ public MashongLevelUpResponse levelUp(Long memberGenerationId, int goalLevel) {
return MashongLevelUpResponse.of(levelUpResult, platformMashong.getLevel());
}

// TODO: even publisher 로 변경
if (levelUpResult.isUpdateLog()) {
mashongMissionFacadeService.setToValue(
mashongMissionEventPublisher.publish(new MashongMissionEvent(
MissionStrategyType.MASHONG_LEVEL_TEAM,
memberGeneration,
(double) goalPlatformMashongLevel.getLevel()
);
(double) goalPlatformMashongLevel.getLevel(),
MissionEventType.SET_TO_VALUE
));
}

return MashongLevelUpResponse.of(levelUpResult, goalPlatformMashongLevel);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@
import kr.mashup.branding.service.member.MemberService;
import kr.mashup.branding.ui.mashong.response.MashongAttendanceResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Slf4j
@Service
@RequiredArgsConstructor
public class MashongMissionFacadeService {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package kr.mashup.branding.ui.mashong;

import kr.mashup.branding.config.async.ThreadPoolName;
import kr.mashup.branding.facade.mashong.MashongMissionFacadeService;
import kr.mashup.branding.service.mashong.event.MashongMissionEvent;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.event.TransactionalEventListener;

@Slf4j
@RequiredArgsConstructor
@Component
public class MashongMissionEventListener {

private final MashongMissionFacadeService mashongMissionFacadeService;

@Async(value = ThreadPoolName.MASHONG_MISSION_THREAD_POOL)
@Transactional(propagation = Propagation.NEVER)
@TransactionalEventListener
public void handleMashongMissionEvent(MashongMissionEvent event) {
log.info("MASHONG_MISSION_{}_EVENT_LISTEN :: memberGenerationId = {}",
event.getEventType(),
event.getMemberGeneration().getId()
);

if (event.isApplyEvent()) {
mashongMissionFacadeService.apply(
event.getMissionStrategyType(),
event.getMemberGeneration(),
event.getValue()
);
return;
}

mashongMissionFacadeService.setToValue(
event.getMissionStrategyType(),
event.getMemberGeneration(),
event.getValue()
);
Comment on lines +25 to +43
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[의견]
단순의견입니닷 enum이 있으니까 switch로 하는건어떤가유~ 그냥 의견이라 편하게 ㄲㄲ

}
}
Loading