[AB-203] using task executors for the async listeners

fixing starboard post listener and service method
This commit is contained in:
Sheldan
2021-03-21 21:00:21 +01:00
parent ebed1daadc
commit 5eefc3909e
28 changed files with 305 additions and 58 deletions

View File

@@ -11,8 +11,13 @@ public class StarboardListenerConfig {
@Autowired
private ExecutorService executorService;
@Bean(name = "starboardStatusListenerExecutor")
public TaskExecutor joinListenerExecutor() {
return executorService.setupExecutorFor("starboardStatusListener");
@Bean(name = "starboardCreatedListenerExecutor")
public TaskExecutor starboardPostCreatedExecutor() {
return executorService.setupExecutorFor("starboardCreatedListener");
}
@Bean(name = "starboardDeletedListenerExecutor")
public TaskExecutor starboardPostDeletedExecutor() {
return executorService.setupExecutorFor("starboardDeletedListener");
}
}

View File

@@ -16,7 +16,7 @@ import java.util.Optional;
@Component
@Slf4j
public class StarboardPostDeletedListener implements AsyncMessageDeletedListener {
public class StarboardMessagePostDeletedListener implements AsyncMessageDeletedListener {
@Autowired
private StarboardPostManagementService starboardPostManagementService;
@@ -24,7 +24,7 @@ public class StarboardPostDeletedListener implements AsyncMessageDeletedListener
@Override
public DefaultListenerResult execute(MessageDeletedModel model) {
CachedMessage message = model.getCachedMessage();
Optional<StarboardPost> byStarboardPostId = starboardPostManagementService.findByStarboardPostId(message.getMessageId());
Optional<StarboardPost> byStarboardPostId = starboardPostManagementService.findByStarboardPostMessageId(message.getMessageId());
if(byStarboardPostId.isPresent()) {
StarboardPost post = byStarboardPostId.get();
log.info("Removing starboard post: message {}, channel {}, server {}, because the message was deleted",

View File

@@ -5,9 +5,8 @@ import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import dev.sheldan.abstracto.core.models.ServerUser;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.starboard.listener.StarboardPostState;
import dev.sheldan.abstracto.starboard.listener.StarboardPostUpdatedListener;
import dev.sheldan.abstracto.starboard.model.StarboardPostUpdatedModel;
import dev.sheldan.abstracto.starboard.listener.StarboardPostCreatedListener;
import dev.sheldan.abstracto.starboard.model.StarboardPostCreatedModel;
import dev.sheldan.abstracto.starboard.model.database.StarboardPost;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,17 +19,17 @@ import java.util.stream.Collectors;
@Component
@Slf4j
public class StarboardPostListenerManager {
public class StarboardPostCreatedListenerManager {
@Autowired(required = false)
private List<StarboardPostUpdatedListener> listeners;
private List<StarboardPostCreatedListener> listeners;
@Autowired
@Qualifier("starboardStatusListenerExecutor")
private TaskExecutor starboardStatusExecutor;
@Qualifier("starboardCreatedListenerExecutor")
private TaskExecutor starboardCreatedExecutor;
@Autowired
private StarboardPostListenerManager self;
private StarboardPostCreatedListenerManager self;
@Autowired
private FeatureConfigService featureConfigService;
@@ -46,20 +45,11 @@ public class StarboardPostListenerManager {
return;
}
ServerUser userReactingServerUser = ServerUser.builder().serverId(post.getServer().getId()).userId(userReactingId).build();
StarboardPostUpdatedModel model = createStarboardStatusModel(post, userReactingServerUser);
model.setNewState(StarboardPostState.CREATED);
listeners.forEach(listener -> listenerService.executeFeatureAwareListener(listener, model));
StarboardPostCreatedModel model = createStarboardStatusModel(post, userReactingServerUser);
listeners.forEach(listener -> listenerService.executeFeatureAwareListener(listener, model, starboardCreatedExecutor));
}
public void sendStarboardPostDeletedEvent(StarboardPost post, ServerUser userReacting) {
if(listeners == null || listeners.isEmpty()) {
return;
}
StarboardPostUpdatedModel model = createStarboardStatusModel(post, userReacting);
model.setNewState(StarboardPostState.DELETED);
}
private StarboardPostUpdatedModel createStarboardStatusModel(StarboardPost post, ServerUser userReacting) {
private StarboardPostCreatedModel createStarboardStatusModel(StarboardPost post, ServerUser userReacting) {
Long serverId = post.getServer().getId();
ServerUser starredUser = ServerUser
.builder()
@@ -85,9 +75,10 @@ public class StarboardPostListenerManager {
.stream()
.map(starboardPostReaction -> starboardPostReaction.getReactor().getUserReference().getId())
.collect(Collectors.toList());
return StarboardPostUpdatedModel
return StarboardPostCreatedModel
.builder()
.lastStarrer(userReacting)
.starboardPostId(post.getId())
.starredUser(starredUser)
.starboardMessage(starboardMessagePayLoad)
.starredMessage(starredMessage)

View File

@@ -0,0 +1,88 @@
package dev.sheldan.abstracto.starboard.service;
import dev.sheldan.abstracto.core.listener.ListenerService;
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import dev.sheldan.abstracto.core.models.ServerUser;
import dev.sheldan.abstracto.core.service.FeatureConfigService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.starboard.listener.StarboardPostDeletedListener;
import dev.sheldan.abstracto.starboard.model.StarboardPostDeletedModel;
import dev.sheldan.abstracto.starboard.model.database.StarboardPost;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
@Component
@Slf4j
public class StarboardPostDeletedListenerManager {
@Autowired(required = false)
private List<StarboardPostDeletedListener> listeners;
@Autowired
@Qualifier("starboardDeletedListenerExecutor")
private TaskExecutor starboardDeletedExecutor;
@Autowired
private StarboardPostDeletedListenerManager self;
@Autowired
private FeatureConfigService featureConfigService;
@Autowired
private FeatureFlagService featureFlagService;
@Autowired
private ListenerService listenerService;
public void sendStarboardPostDeletedEvent(StarboardPost post, ServerUser userReacting) {
if(listeners == null || listeners.isEmpty()) {
return;
}
StarboardPostDeletedModel model = createStarboardStatusModel(post, userReacting);
listeners.forEach(listener -> listenerService.executeFeatureAwareListener(listener, model, starboardDeletedExecutor));
}
private StarboardPostDeletedModel createStarboardStatusModel(StarboardPost post, ServerUser userReacting) {
Long serverId = post.getServer().getId();
ServerUser starredUser = ServerUser
.builder()
.serverId(serverId)
.userId(post.getAuthor().getUserReference().getId())
.build();
ServerChannelMessage starboardMessagePayLoad = ServerChannelMessage
.builder()
.serverId(serverId)
.channelId(post.getStarboardChannel().getId())
.messageId(post.getStarboardMessageId())
.build();
ServerChannelMessage starredMessage = ServerChannelMessage
.builder()
.serverId(serverId)
.channelId(post.getSourceChannel().getId())
.messageId(post.getPostMessageId())
.build();
List<Long> starrerIds = post.
getReactions()
.stream()
.map(starboardPostReaction -> starboardPostReaction.getReactor().getUserReference().getId())
.collect(Collectors.toList());
return StarboardPostDeletedModel
.builder()
.lastStarrer(userReacting)
.starboardPostId(post.getId())
.starredUser(starredUser)
.starboardMessage(starboardMessagePayLoad)
.starredMessage(starredMessage)
.allStarrer(starrerIds)
.build();
}
}

View File

@@ -91,7 +91,10 @@ public class StarboardServiceBean implements StarboardService {
private StarboardServiceBean self;
@Autowired
private StarboardPostListenerManager starboardPostListenerManager;
private StarboardPostDeletedListenerManager starboardPostDeletedListenerManager;
@Autowired
private StarboardPostCreatedListenerManager starboardPostCreatedListenerManager;
@Autowired
private UserService userService;
@@ -138,7 +141,7 @@ public class StarboardServiceBean implements StarboardService {
AUserInAServer user = userInServerManagementService.loadUserOptional(aLong).orElseThrow(() -> new UserInServerNotFoundException(aLong));
starboardPostReactorManagementService.addReactor(starboardPost, user);
});
starboardPostListenerManager.sendStarboardPostCreatedEvent(userReactingId, starboardPost);
starboardPostCreatedListenerManager.sendStarboardPostCreatedEvent(userReactingId, starboardPost);
}
@@ -250,7 +253,7 @@ public class StarboardServiceBean implements StarboardService {
public void deleteStarboardPost(StarboardPost starboardPost, ServerUser userReacting) {
deleteStarboardMessagePost(starboardPost);
starboardPostManagementService.removePost(starboardPost);
starboardPostListenerManager.sendStarboardPostDeletedEvent(starboardPost, userReacting);
starboardPostDeletedListenerManager.sendStarboardPostDeletedEvent(starboardPost, userReacting);
}
private String getStarboardRankingEmote(Long serverId, Integer position) {

View File

@@ -97,6 +97,11 @@ public class StarboardPostManagementServiceBean implements StarboardPostManageme
@Override
public Optional<StarboardPost> findByStarboardPostId(Long postId) {
return repository.findById(postId);
}
@Override
public Optional<StarboardPost> findByStarboardPostMessageId(Long postId) {
return Optional.ofNullable(repository.findByStarboardMessageId(postId));
}

View File

@@ -17,10 +17,10 @@ import java.util.Optional;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class StarboardPostDeletedListenerTest {
public class StarboardMessagePostDeletedListenerTest {
@InjectMocks
private StarboardPostDeletedListener testUnit;
private StarboardMessagePostDeletedListener testUnit;
@Mock
private StarboardPostManagementService starboardPostManagementService;
@@ -28,7 +28,7 @@ public class StarboardPostDeletedListenerTest {
@Test
public void deleteNonStarboardPost() {
Long messageId = 4L;
when(starboardPostManagementService.findByStarboardPostId(messageId)).thenReturn(Optional.empty());
when(starboardPostManagementService.findByStarboardPostMessageId(messageId)).thenReturn(Optional.empty());
MessageDeletedModel model = Mockito.mock(MessageDeletedModel.class);
CachedMessage cachedMessage = Mockito.mock(CachedMessage.class);
when(cachedMessage.getMessageId()).thenReturn(messageId);
@@ -46,7 +46,7 @@ public class StarboardPostDeletedListenerTest {
StarboardPost post = Mockito.mock(StarboardPost.class);
when(post.getSourceChannel()) .thenReturn(sourceChannel);
when(post.getPostMessageId()).thenReturn(postMessageId);
when(starboardPostManagementService.findByStarboardPostId(messageId)).thenReturn(Optional.of(post));
when(starboardPostManagementService.findByStarboardPostMessageId(messageId)).thenReturn(Optional.of(post));
CachedMessage cachedMessage = Mockito.mock(CachedMessage.class);
when(cachedMessage.getServerId()).thenReturn(serverId);
when(cachedMessage.getMessageId()).thenReturn(messageId);

View File

@@ -242,7 +242,7 @@ public class StarboardServiceBeanTest {
when(config.getLongValue()).thenReturn(1L);
when(defaultConfigManagementService.getDefaultConfig(StarboardFeature.STAR_LEVELS_CONFIG_KEY)).thenReturn(config);
when(defaultConfigManagementService.getDefaultConfig(StarboardFeature.STAR_LVL_CONFIG_PREFIX + 1)).thenReturn(config);
when(starboardPostManagementService.findByStarboardPostId(starboardPostId)).thenReturn(Optional.of(post));
when(starboardPostManagementService.findByStarboardPostMessageId(starboardPostId)).thenReturn(Optional.of(post));
when(userService.retrieveUserForId(STARRED_USER_ID)).thenReturn(CompletableFuture.completedFuture(starredJdaUser));
List<AUserInAServer > userExceptAuthor = new ArrayList<>();
CompletableFuture<Void> future = testUnit.updateStarboardPost(post, message, userExceptAuthor);

View File

@@ -179,7 +179,7 @@ public class StarboardPostManagementServiceBeanTest {
Long postId = 5L;
StarboardPost post = Mockito.mock(StarboardPost.class);
when(repository.findByStarboardMessageId(postId)).thenReturn(post);
Optional<StarboardPost> postOptional = testUnit.findByStarboardPostId(postId);
Optional<StarboardPost> postOptional = testUnit.findByStarboardPostMessageId(postId);
Assert.assertTrue(postOptional.isPresent());
postOptional.ifPresent(starboardPost -> Assert.assertEquals(starboardPost, post));
}
@@ -188,7 +188,7 @@ public class StarboardPostManagementServiceBeanTest {
public void testFindByStarboardPostIdMissing() {
Long postId = 5L;
when(repository.findByStarboardMessageId(postId)).thenReturn(null);
Optional<StarboardPost> postOptional = testUnit.findByStarboardPostId(postId);
Optional<StarboardPost> postOptional = testUnit.findByStarboardPostMessageId(postId);
Assert.assertFalse(postOptional.isPresent());
}

View File

@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.starboard.listener;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
import dev.sheldan.abstracto.starboard.model.StarboardPostUpdatedModel;
import dev.sheldan.abstracto.starboard.model.StarboardPostCreatedModel;
public interface StarboardPostUpdatedListener extends FeatureAwareListener<StarboardPostUpdatedModel, DefaultListenerResult> {
public interface StarboardPostCreatedListener extends FeatureAwareListener<StarboardPostCreatedModel, DefaultListenerResult> {
}

View File

@@ -0,0 +1,8 @@
package dev.sheldan.abstracto.starboard.listener;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.listener.FeatureAwareListener;
import dev.sheldan.abstracto.starboard.model.StarboardPostDeletedModel;
public interface StarboardPostDeletedListener extends FeatureAwareListener<StarboardPostDeletedModel, DefaultListenerResult> {
}

View File

@@ -1,5 +0,0 @@
package dev.sheldan.abstracto.starboard.listener;
public enum StarboardPostState {
CREATED, UPDATED, UPDATED_CHANGED_THRESHOLD, DELETED
}

View File

@@ -3,7 +3,6 @@ package dev.sheldan.abstracto.starboard.model;
import dev.sheldan.abstracto.core.listener.FeatureAwareListenerModel;
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import dev.sheldan.abstracto.core.models.ServerUser;
import dev.sheldan.abstracto.starboard.listener.StarboardPostState;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -13,14 +12,13 @@ import java.util.List;
@Getter
@Setter
@Builder
public class StarboardPostUpdatedModel implements FeatureAwareListenerModel {
public class StarboardPostCreatedModel implements FeatureAwareListenerModel {
private ServerChannelMessage starredMessage;
private ServerChannelMessage starboardMessage;
private ServerUser starredUser;
private ServerUser lastStarrer;
private Long starboardPostId;
private List<Long> allStarrer;
private StarboardPostState newState;
@Override
public Long getServerId() {

View File

@@ -0,0 +1,27 @@
package dev.sheldan.abstracto.starboard.model;
import dev.sheldan.abstracto.core.listener.FeatureAwareListenerModel;
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import dev.sheldan.abstracto.core.models.ServerUser;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@Builder
public class StarboardPostDeletedModel implements FeatureAwareListenerModel {
private ServerChannelMessage starredMessage;
private ServerChannelMessage starboardMessage;
private ServerUser starredUser;
private ServerUser lastStarrer;
private Long starboardPostId;
private List<Long> allStarrer;
@Override
public Long getServerId() {
return starredUser.getServerId();
}
}

View File

@@ -20,6 +20,7 @@ public interface StarboardPostManagementService {
Integer getPostCount(Long serverId);
Optional<StarboardPost> findByMessageId(Long messageId);
Optional<StarboardPost> findByStarboardPostId(Long postId);
Optional<StarboardPost> findByStarboardPostMessageId(Long postId);
void setStarboardPostIgnored(Long starboardPostId, Boolean newValue);
boolean isStarboardPost(Long starboardPostId);
void removePost(StarboardPost starboardPost);

View File

@@ -77,6 +77,59 @@ public class ListenerExecutorConfig {
return executorService.setupExecutorFor("reactionClearedListener");
}
@Bean(name = "aChannelCreatedExecutor")
public TaskExecutor aChannelCreatedExecutor() {
return executorService.setupExecutorFor("aChannelCreatedListener");
}
@Bean(name = "aChannelDeletedExecutor")
public TaskExecutor aChannelDeletedExecutor() {
return executorService.setupExecutorFor("aChannelDeletedListener");
}
@Bean(name = "aRoleCreatedExecutor")
public TaskExecutor aRoleCreatedExecutor() {
return executorService.setupExecutorFor("aRoleCreatedListener");
}
@Bean(name = "aRoleDeletedExecutor")
public TaskExecutor aRoleDeletedExecutor() {
return executorService.setupExecutorFor("aRoleDeletedListener");
}
@Bean(name = "channelGroupCreatedExecutor")
public TaskExecutor channelGroupCreatedExecutor() {
return executorService.setupExecutorFor("channelGroupCreatedListener");
}
@Bean(name = "channelGroupDeletedExecutor")
public TaskExecutor channelGroupDeletedExecutor() {
return executorService.setupExecutorFor("channelGroupDeletedListener");
}
@Bean(name = "serverJoinExecutor")
public TaskExecutor serverJoinExecutor() {
return executorService.setupExecutorFor("serverJoinListener");
}
@Bean(name = "roleCreatedExecutor")
public TaskExecutor roleCreatedExecutor() {
return executorService.setupExecutorFor("roleCreatedListener");
}
@Bean(name = "roleDeletedExecutor")
public TaskExecutor roleDeletedExecutor() {
return executorService.setupExecutorFor("roleDeletedListener");
}
@Bean(name = "channelCreatedExecutor")
public TaskExecutor channelCreatedExecutor() {
return executorService.setupExecutorFor("channelCreatedListener");
}
@Bean(name = "channelDeletedExecutor")
public TaskExecutor channelDeletedExecutor() {
return executorService.setupExecutorFor("channelDeletedListener");
}
}

View File

@@ -11,6 +11,8 @@ import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.channel.text.TextChannelCreateEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
@@ -33,6 +35,10 @@ public class AsyncAChannelCreatedListenerBean extends ListenerAdapter {
@Autowired
private ChannelManagementService channelManagementService;
@Autowired
@Qualifier("aChannelCreatedExecutor")
private TaskExecutor channelCreatedExecutor;
@Override
public void onTextChannelCreate(@Nonnull TextChannelCreateEvent event) {
log.info("Creating text channel with ID {}.", event.getChannel().getIdLong());
@@ -45,7 +51,7 @@ public class AsyncAChannelCreatedListenerBean extends ListenerAdapter {
@TransactionalEventListener
public void executeServerCreationListener(AChannelCreatedListenerModel model) {
if(channelListener == null) return;
channelListener.forEach(serverCreatedListener -> listenerService.executeListener(serverCreatedListener, model));
channelListener.forEach(serverCreatedListener -> listenerService.executeListener(serverCreatedListener, model, channelCreatedExecutor));
}
}

View File

@@ -7,6 +7,8 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.channel.text.TextChannelDeleteEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
@@ -26,6 +28,10 @@ public class AsyncAChannelDeletedListenerBean extends ListenerAdapter {
@Autowired
private ChannelManagementService channelManagementService;
@Autowired
@Qualifier("aChannelDeletedExecutor")
private TaskExecutor channelDeletedExecutor;
@Override
public void onTextChannelDelete(@Nonnull TextChannelDeleteEvent event) {
channelManagementService.markAsDeleted(event.getChannel().getIdLong());
@@ -34,7 +40,7 @@ public class AsyncAChannelDeletedListenerBean extends ListenerAdapter {
@TransactionalEventListener
public void executeServerCreationListener(AChannelDeletedListenerModel model) {
if(channelDeletedListeners == null) return;
channelDeletedListeners.forEach(serverCreatedListener -> listenerService.executeListener(serverCreatedListener, model));
channelDeletedListeners.forEach(serverCreatedListener -> listenerService.executeListener(serverCreatedListener, model, channelDeletedExecutor));
}
}

View File

@@ -9,6 +9,8 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.role.RoleCreateEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
@@ -31,6 +33,10 @@ public class AsyncARoleCreatedListenerBean extends ListenerAdapter {
@Autowired
private RoleManagementService roleManagementService;
@Autowired
@Qualifier("aRoleCreatedExecutor")
private TaskExecutor roleCreatedExecutor;
@Override
public void onRoleCreate(@Nonnull RoleCreateEvent event) {
AServer server = serverManagementService.loadServer(event.getGuild());
@@ -40,7 +46,7 @@ public class AsyncARoleCreatedListenerBean extends ListenerAdapter {
@TransactionalEventListener
public void executeServerCreationListener(ARoleCreatedListenerModel model) {
if(roleCreatedListeners == null) return;
roleCreatedListeners.forEach(asyncServerCreatedListener -> listenerService.executeListener(asyncServerCreatedListener, model));
roleCreatedListeners.forEach(asyncServerCreatedListener -> listenerService.executeListener(asyncServerCreatedListener, model, roleCreatedExecutor));
}
}

View File

@@ -7,6 +7,8 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.role.RoleDeleteEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
@@ -26,6 +28,10 @@ public class AsyncARoleDeletedListenerBean extends ListenerAdapter {
@Autowired
private ListenerService listenerService;
@Autowired
@Qualifier("aRoleDeletedExecutor")
private TaskExecutor roleDeletedExecutor;
@Override
public void onRoleDelete(@Nonnull RoleDeleteEvent event) {
roleManagementService.markDeleted(event.getRole().getIdLong());
@@ -34,7 +40,7 @@ public class AsyncARoleDeletedListenerBean extends ListenerAdapter {
@TransactionalEventListener
public void executeServerCreationListener(ARoleDeletedListenerModel model) {
if(roleDeletedListeners == null) return;
roleDeletedListeners.forEach(serverCreatedListener -> listenerService.executeListener(serverCreatedListener, model));
roleDeletedListeners.forEach(serverCreatedListener -> listenerService.executeListener(serverCreatedListener, model, roleDeletedExecutor));
}
}

View File

@@ -4,6 +4,8 @@ import dev.sheldan.abstracto.core.listener.ListenerService;
import dev.sheldan.abstracto.core.listener.sync.entity.AsyncChannelGroupCreatedListener;
import dev.sheldan.abstracto.core.models.listener.ChannelGroupCreatedListenerModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
@@ -17,10 +19,14 @@ public class AsyncChannelGroupCreatedListenerManager {
@Autowired
private ListenerService listenerService;
@Autowired
@Qualifier("channelGroupCreatedExecutor")
private TaskExecutor channelGroupCreatedExecutor;
@TransactionalEventListener
public void executeListener(ChannelGroupCreatedListenerModel createdGroup){
listener.forEach(asyncChannelGroupCreatedListener ->
listenerService.executeListener(asyncChannelGroupCreatedListener, createdGroup)
listenerService.executeListener(asyncChannelGroupCreatedListener, createdGroup, channelGroupCreatedExecutor)
);
}

View File

@@ -4,6 +4,8 @@ import dev.sheldan.abstracto.core.listener.ListenerService;
import dev.sheldan.abstracto.core.listener.sync.entity.AsyncChannelGroupDeletedListener;
import dev.sheldan.abstracto.core.models.listener.ChannelGroupDeletedListenerModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
@@ -17,10 +19,14 @@ public class AsyncChannelGroupDeletedListenerManager {
@Autowired
private ListenerService listenerService;
@Autowired
@Qualifier("channelGroupDeletedExecutor")
private TaskExecutor channelGroupDeletedExecutor;
@TransactionalEventListener
public void executeListener(ChannelGroupDeletedListenerModel model){
listener.forEach(channelGroupCreatedListener ->
listenerService.executeListener(channelGroupCreatedListener, model)
listenerService.executeListener(channelGroupCreatedListener, model, channelGroupDeletedExecutor)
);
}

View File

@@ -7,6 +7,8 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.event.TransactionalEventListener;
@@ -27,6 +29,10 @@ public class AsyncServerJoinListenerBean extends ListenerAdapter {
@Autowired
private ListenerService listenerService;
@Autowired
@Qualifier("serverJoinExecutor")
private TaskExecutor serverJoinExecutor;
@Override
@Transactional
public void onGuildJoin(@Nonnull GuildJoinEvent event) {
@@ -38,7 +44,7 @@ public class AsyncServerJoinListenerBean extends ListenerAdapter {
@TransactionalEventListener
public void executeServerCreationListener(ServerCreatedListenerModel model) {
if(serverCreatedListeners == null) return;
serverCreatedListeners.forEach(asyncServerCreatedListener -> listenerService.executeListener(asyncServerCreatedListener, model));
serverCreatedListeners.forEach(asyncServerCreatedListener -> listenerService.executeListener(asyncServerCreatedListener, model, serverJoinExecutor));
}
}

View File

@@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.role.RoleCreateEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.Nonnull;
@@ -21,11 +23,16 @@ public class AsyncRoleCreatedListenerBean extends ListenerAdapter {
@Autowired
private ListenerService listenerService;
@Autowired
@Qualifier("roleCreatedExecutor")
private TaskExecutor roleCreatedExecutor;
@Override
public void onRoleCreate(@Nonnull RoleCreateEvent event) {
if(listenerList == null) return;
RoleCreatedModel model = getModel(event);
listenerList.forEach(roleCreatedListener -> listenerService.executeFeatureAwareListener(roleCreatedListener, model));
listenerList.forEach(roleCreatedListener -> listenerService.executeFeatureAwareListener(roleCreatedListener, model, roleCreatedExecutor));
}
private RoleCreatedModel getModel(RoleCreateEvent event) {

View File

@@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.role.RoleDeleteEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Component;
import javax.annotation.Nonnull;
@@ -21,11 +23,15 @@ public class AsyncRoleDeletedListenerBean extends ListenerAdapter {
@Autowired
private ListenerService listenerService;
@Autowired
@Qualifier("roleDeletedExecutor")
private TaskExecutor roleDeletedExecutor;
@Override
public void onRoleDelete(@Nonnull RoleDeleteEvent event) {
if(listenerList == null) return;
RoleDeletedModel model = getModel(event);
listenerList.forEach(roleCreatedListener -> listenerService.executeFeatureAwareListener(roleCreatedListener, model));
listenerList.forEach(roleCreatedListener -> listenerService.executeFeatureAwareListener(roleCreatedListener, model, roleDeletedExecutor));
}
private RoleDeletedModel getModel(RoleDeleteEvent event) {

View File

@@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.channel.text.TextChannelCreateEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import javax.annotation.Nonnull;
@@ -21,11 +23,15 @@ public class AsyncTextChannelCreatedListenerBean extends ListenerAdapter {
@Autowired
private ListenerService listenerService;
@Autowired
@Qualifier("channelCreatedExecutor")
private TaskExecutor channelCreatedExecutor;
@Override
public void onTextChannelCreate(@Nonnull TextChannelCreateEvent event) {
if(listenerList == null) return;
TextChannelCreatedModel model = getModel(event);
listenerList.forEach(textChannelCreatedListener -> listenerService.executeFeatureAwareListener(textChannelCreatedListener, model));
listenerList.forEach(textChannelCreatedListener -> listenerService.executeFeatureAwareListener(textChannelCreatedListener, model, channelCreatedExecutor));
}
private TextChannelCreatedModel getModel(TextChannelCreateEvent event) {

View File

@@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.channel.text.TextChannelDeleteEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import org.springframework.stereotype.Service;
import javax.annotation.Nonnull;
@@ -21,11 +23,16 @@ public class AsyncTextChannelDeletedListenerBean extends ListenerAdapter {
@Autowired
private ListenerService listenerService;
@Autowired
@Qualifier("channelDeletedExecutor")
private TaskExecutor channelDeletedExecutor;
@Override
public void onTextChannelDelete(@Nonnull TextChannelDeleteEvent event) {
if(listenerList == null) return;
TextChannelDeletedModel model = getModel(event);
listenerList.forEach(textChannelCreatedListener -> listenerService.executeFeatureAwareListener(textChannelCreatedListener, model));
listenerList.forEach(textChannelCreatedListener -> listenerService.executeFeatureAwareListener(textChannelCreatedListener, model, channelDeletedExecutor));
}
private TextChannelDeletedModel getModel(TextChannelDeleteEvent event) {

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.utils.MessageUtils;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -11,4 +12,8 @@ public class ServerChannelMessage {
private Long serverId;
private Long channelId;
private Long messageId;
public String getJumpUrl() {
return MessageUtils.buildMessageUrl(serverId, channelId, messageId);
}
}