[AB-257] fixing link embed message being deleted while it still contains an attachment

adding more convenience methods to post target services
This commit is contained in:
Sheldan
2021-05-11 12:58:39 +02:00
parent e31d257e6f
commit 9ebf0f08dd
6 changed files with 42 additions and 27 deletions

View File

@@ -3,7 +3,6 @@ package dev.sheldan.abstracto.linkembed.listener;
import dev.sheldan.abstracto.core.config.FeatureDefinition; import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.ListenerPriority; import dev.sheldan.abstracto.core.config.ListenerPriority;
import dev.sheldan.abstracto.core.listener.ConsumableListenerResult; import dev.sheldan.abstracto.core.listener.ConsumableListenerResult;
import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
import dev.sheldan.abstracto.core.listener.sync.jda.MessageReceivedListener; import dev.sheldan.abstracto.core.listener.sync.jda.MessageReceivedListener;
import dev.sheldan.abstracto.core.metric.service.CounterMetric; import dev.sheldan.abstracto.core.metric.service.CounterMetric;
import dev.sheldan.abstracto.core.metric.service.MetricService; import dev.sheldan.abstracto.core.metric.service.MetricService;
@@ -85,7 +84,7 @@ public class MessageEmbedListener implements MessageReceivedListener {
}); });
} }
} }
if(StringUtils.isBlank(messageRaw) && !links.isEmpty()) { if(StringUtils.isBlank(messageRaw) && !links.isEmpty() && message.getAttachments().isEmpty()) {
messageService.deleteMessage(message); messageService.deleteMessage(message);
return ConsumableListenerResult.DELETED; return ConsumableListenerResult.DELETED;
} }

View File

@@ -6,11 +6,12 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Optional;
@Repository @Repository
public interface PostTargetRepository extends JpaRepository<PostTarget, Long> { public interface PostTargetRepository extends JpaRepository<PostTarget, Long> {
PostTarget findPostTargetByNameAndServerReference(String name, AServer server); Optional<PostTarget> findPostTargetByNameAndServerReference(String name, AServer server);
boolean existsByNameAndServerReference(String name, AServer server); boolean existsByNameAndServerReference(String name, AServer server);

View File

@@ -4,7 +4,6 @@ import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.PostTargetEnum; import dev.sheldan.abstracto.core.config.PostTargetEnum;
import dev.sheldan.abstracto.core.exception.ChannelNotInGuildException; import dev.sheldan.abstracto.core.exception.ChannelNotInGuildException;
import dev.sheldan.abstracto.core.exception.GuildNotFoundException; import dev.sheldan.abstracto.core.exception.GuildNotFoundException;
import dev.sheldan.abstracto.core.exception.PostTargetNotFoundException;
import dev.sheldan.abstracto.core.exception.PostTargetNotValidException; import dev.sheldan.abstracto.core.exception.PostTargetNotValidException;
import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
@@ -80,32 +79,21 @@ public class PostTargetServiceBean implements PostTargetService {
} }
} }
@Override
public PostTarget getPostTarget(PostTargetEnum postTargetName, Long serverId) {
PostTarget postTarget = postTargetManagement.getPostTarget(postTargetName.getKey(), serverId);
if(postTarget != null) {
return postTarget;
} else {
log.error("PostTarget {} in server {} was not found!", postTargetName, serverId);
throw new PostTargetNotFoundException(postTargetName.getKey());
}
}
@Override @Override
public CompletableFuture<Message> sendTextInPostTarget(String text, PostTargetEnum postTargetEnum, Long serverId) { public CompletableFuture<Message> sendTextInPostTarget(String text, PostTargetEnum postTargetEnum, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetEnum, serverId); PostTarget postTarget = getPostTarget(postTargetEnum, serverId);
return this.sendTextInPostTarget(text, postTarget); return this.sendTextInPostTarget(text, postTarget);
} }
@Override @Override
public CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, PostTargetEnum postTargetName, Long serverId) { public CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, PostTargetEnum postTargetName, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId); PostTarget postTarget = getPostTarget(postTargetName, serverId);
return this.sendEmbedInPostTarget(embed, postTarget); return this.sendEmbedInPostTarget(embed, postTarget);
} }
@Override @Override
public CompletableFuture<Message> sendMessageInPostTarget(Message message, PostTargetEnum postTargetName, Long serverId) { public CompletableFuture<Message> sendMessageInPostTarget(Message message, PostTargetEnum postTargetName, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId); PostTarget postTarget = getPostTarget(postTargetName, serverId);
return sendMessageInPostTarget(message, postTarget); return sendMessageInPostTarget(message, postTarget);
} }
@@ -117,7 +105,7 @@ public class PostTargetServiceBean implements PostTargetService {
@Override @Override
public List<CompletableFuture<Message>> sendEmbedInPostTarget(MessageToSend message, PostTargetEnum postTargetName, Long serverId) { public List<CompletableFuture<Message>> sendEmbedInPostTarget(MessageToSend message, PostTargetEnum postTargetName, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId); PostTarget postTarget = getPostTarget(postTargetName, serverId);
return this.sendEmbedInPostTarget(message, postTarget); return this.sendEmbedInPostTarget(message, postTarget);
} }
@@ -189,13 +177,13 @@ public class PostTargetServiceBean implements PostTargetService {
@Override @Override
public List<CompletableFuture<Message>> editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, PostTargetEnum postTargetName, Long serverId) { public List<CompletableFuture<Message>> editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, PostTargetEnum postTargetName, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId); PostTarget postTarget = getPostTarget(postTargetName, serverId);
return this.editOrCreatedInPostTarget(messageId, messageToSend, postTarget); return this.editOrCreatedInPostTarget(messageId, messageToSend, postTarget);
} }
@Override @Override
public void throwIfPostTargetIsNotDefined(PostTargetEnum name, Long serverId) { public void throwIfPostTargetIsNotDefined(PostTargetEnum name, Long serverId) {
PostTarget postTarget = postTargetManagement.getPostTarget(name.getKey(), serverId); PostTarget postTarget = getPostTarget(name, serverId);
if(postTarget == null) { if(postTarget == null) {
throw new PostTargetNotValidException(name.getKey(), defaultPostTargetManagementService.getDefaultPostTargetKeys()); throw new PostTargetNotValidException(name.getKey(), defaultPostTargetManagementService.getDefaultPostTargetKeys());
} }
@@ -208,10 +196,14 @@ public class PostTargetServiceBean implements PostTargetService {
@Override @Override
public List<CompletableFuture<Message>> editEmbedInPostTarget(Long messageId, MessageToSend message, PostTargetEnum postTargetName, Long serverId) { public List<CompletableFuture<Message>> editEmbedInPostTarget(Long messageId, MessageToSend message, PostTargetEnum postTargetName, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId); PostTarget postTarget = getPostTarget(postTargetName, serverId);
return editEmbedInPostTarget(messageId, message, postTarget); return editEmbedInPostTarget(messageId, message, postTarget);
} }
private PostTarget getPostTarget(PostTargetEnum postTargetEnum, Long serverId) {
return postTargetManagement.getPostTarget(postTargetEnum.getKey(), serverId);
}
@Override @Override
public boolean validPostTarget(String name) { public boolean validPostTarget(String name) {
List<String> possiblePostTargets = defaultPostTargetManagementService.getDefaultPostTargetKeys(); List<String> possiblePostTargets = defaultPostTargetManagementService.getDefaultPostTargetKeys();

View File

@@ -1,5 +1,7 @@
package dev.sheldan.abstracto.core.service.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import dev.sheldan.abstracto.core.exception.PostTargetNotFoundException;
import dev.sheldan.abstracto.core.exception.PostTargetNotValidException; import dev.sheldan.abstracto.core.exception.PostTargetNotValidException;
import dev.sheldan.abstracto.core.exception.ServerChannelConflictException; import dev.sheldan.abstracto.core.exception.ServerChannelConflictException;
import dev.sheldan.abstracto.core.models.database.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
@@ -12,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Optional;
@Service @Service
@Slf4j @Slf4j
@@ -44,11 +47,11 @@ public class PostTargetManagementBean implements PostTargetManagement {
@Override @Override
public PostTarget createOrUpdate(String name, AChannel targetChannel) { public PostTarget createOrUpdate(String name, AChannel targetChannel) {
PostTarget existing = postTargetRepository.findPostTargetByNameAndServerReference(name, targetChannel.getServer()); Optional<PostTarget> existingTargetOptional = getPostTargetOptional(name, targetChannel.getServer().getId());
if(existing == null){ if(!existingTargetOptional.isPresent()){
return this.createPostTarget(name, targetChannel); return this.createPostTarget(name, targetChannel);
} else { } else {
return this.updatePostTarget(existing, targetChannel); return this.updatePostTarget(existingTargetOptional.get(), targetChannel);
} }
} }
@@ -72,7 +75,12 @@ public class PostTargetManagementBean implements PostTargetManagement {
@Override @Override
public PostTarget getPostTarget(String name, AServer server) { public PostTarget getPostTarget(String name, AServer server) {
return postTargetRepository.findPostTargetByNameAndServerReference(name, server); return postTargetRepository.findPostTargetByNameAndServerReference(name, server).orElseThrow(() -> new PostTargetNotFoundException(name));
}
@Override
public PostTarget getPostTarget(PostTargetEnum postTargetEnum, AServer server) {
return getPostTarget(postTargetEnum.getKey(), server);
} }
@Override @Override
@@ -81,6 +89,17 @@ public class PostTargetManagementBean implements PostTargetManagement {
return getPostTarget(name, server); return getPostTarget(name, server);
} }
@Override
public Optional<PostTarget> getPostTargetOptional(String name, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
return postTargetRepository.findPostTargetByNameAndServerReference(name, server);
}
@Override
public Optional<PostTarget> getPostTargetOptional(PostTargetEnum postTargetEnum, Long serverId) {
return getPostTargetOptional(postTargetEnum.getKey(), serverId);
}
@Override @Override
public Boolean postTargetExists(String name, AServer server) { public Boolean postTargetExists(String name, AServer server) {
return postTargetRepository.existsByNameAndServerReference(name, server); return postTargetRepository.existsByNameAndServerReference(name, server);

View File

@@ -25,7 +25,6 @@ public interface PostTargetService {
List<CompletableFuture<Message>> editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, PostTargetEnum postTarget, Long serverId); List<CompletableFuture<Message>> editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, PostTargetEnum postTarget, Long serverId);
void throwIfPostTargetIsNotDefined(PostTargetEnum name, Long serverId); void throwIfPostTargetIsNotDefined(PostTargetEnum name, Long serverId);
boolean postTargetDefinedInServer(PostTargetEnum name, Long serverId); boolean postTargetDefinedInServer(PostTargetEnum name, Long serverId);
PostTarget getPostTarget(PostTargetEnum postTargetName, Long serverId);
boolean validPostTarget(String name); boolean validPostTarget(String name);
List<PostTarget> getPostTargets(AServer server); List<PostTarget> getPostTargets(AServer server);
List<String> getAvailablePostTargets(); List<String> getAvailablePostTargets();

View File

@@ -1,10 +1,12 @@
package dev.sheldan.abstracto.core.service.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import dev.sheldan.abstracto.core.models.database.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
import java.util.List; import java.util.List;
import java.util.Optional;
public interface PostTargetManagement { public interface PostTargetManagement {
PostTarget createPostTarget(String name, AChannel targetChanel); PostTarget createPostTarget(String name, AChannel targetChanel);
@@ -12,7 +14,10 @@ public interface PostTargetManagement {
PostTarget createOrUpdate(String name, AServer server, Long channelId); PostTarget createOrUpdate(String name, AServer server, Long channelId);
PostTarget createOrUpdate(String name, Long serverId, Long channelId); PostTarget createOrUpdate(String name, Long serverId, Long channelId);
PostTarget getPostTarget(String name, AServer server); PostTarget getPostTarget(String name, AServer server);
PostTarget getPostTarget(PostTargetEnum postTargetEnum, AServer server);
PostTarget getPostTarget(String name, Long serverId); PostTarget getPostTarget(String name, Long serverId);
Optional<PostTarget> getPostTargetOptional(String name, Long serverId);
Optional<PostTarget> getPostTargetOptional(PostTargetEnum postTargetEnum, Long serverId);
Boolean postTargetExists(String name, AServer server); Boolean postTargetExists(String name, AServer server);
boolean postTargetExists(String name, Long serverId); boolean postTargetExists(String name, Long serverId);
PostTarget updatePostTarget(PostTarget target, AChannel newTargetChannel); PostTarget updatePostTarget(PostTarget target, AChannel newTargetChannel);