[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

@@ -6,11 +6,12 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
@Repository
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);

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.exception.ChannelNotInGuildException;
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.models.database.AServer;
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
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);
}
@Override
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);
}
@Override
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);
}
@@ -117,7 +105,7 @@ public class PostTargetServiceBean implements PostTargetService {
@Override
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);
}
@@ -189,13 +177,13 @@ public class PostTargetServiceBean implements PostTargetService {
@Override
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);
}
@Override
public void throwIfPostTargetIsNotDefined(PostTargetEnum name, Long serverId) {
PostTarget postTarget = postTargetManagement.getPostTarget(name.getKey(), serverId);
PostTarget postTarget = getPostTarget(name, serverId);
if(postTarget == null) {
throw new PostTargetNotValidException(name.getKey(), defaultPostTargetManagementService.getDefaultPostTargetKeys());
}
@@ -208,10 +196,14 @@ public class PostTargetServiceBean implements PostTargetService {
@Override
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);
}
private PostTarget getPostTarget(PostTargetEnum postTargetEnum, Long serverId) {
return postTargetManagement.getPostTarget(postTargetEnum.getKey(), serverId);
}
@Override
public boolean validPostTarget(String name) {
List<String> possiblePostTargets = defaultPostTargetManagementService.getDefaultPostTargetKeys();

View File

@@ -1,5 +1,7 @@
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.ServerChannelConflictException;
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 java.util.List;
import java.util.Optional;
@Service
@Slf4j
@@ -44,11 +47,11 @@ public class PostTargetManagementBean implements PostTargetManagement {
@Override
public PostTarget createOrUpdate(String name, AChannel targetChannel) {
PostTarget existing = postTargetRepository.findPostTargetByNameAndServerReference(name, targetChannel.getServer());
if(existing == null){
Optional<PostTarget> existingTargetOptional = getPostTargetOptional(name, targetChannel.getServer().getId());
if(!existingTargetOptional.isPresent()){
return this.createPostTarget(name, targetChannel);
} else {
return this.updatePostTarget(existing, targetChannel);
return this.updatePostTarget(existingTargetOptional.get(), targetChannel);
}
}
@@ -72,7 +75,12 @@ public class PostTargetManagementBean implements PostTargetManagement {
@Override
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
@@ -81,6 +89,17 @@ public class PostTargetManagementBean implements PostTargetManagement {
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
public Boolean postTargetExists(String name, AServer 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);
void throwIfPostTargetIsNotDefined(PostTargetEnum name, Long serverId);
boolean postTargetDefinedInServer(PostTargetEnum name, Long serverId);
PostTarget getPostTarget(PostTargetEnum postTargetName, Long serverId);
boolean validPostTarget(String name);
List<PostTarget> getPostTargets(AServer server);
List<String> getAvailablePostTargets();

View File

@@ -1,10 +1,12 @@
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.AServer;
import dev.sheldan.abstracto.core.models.database.PostTarget;
import java.util.List;
import java.util.Optional;
public interface PostTargetManagement {
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, Long serverId, Long channelId);
PostTarget getPostTarget(String name, AServer server);
PostTarget getPostTarget(PostTargetEnum postTargetEnum, AServer server);
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, Long serverId);
PostTarget updatePostTarget(PostTarget target, AChannel newTargetChannel);