mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-09 02:09:38 +00:00
introduced eh-cache as a caching provider instead of caffeine to be used in hibernate (only ram cache is currently possible)
added caching configuration for 2nd level caching in hibernate added command to clear hibernate caches changed some interfaces so the api looks a bit more consistent (return the created/updated value) split user management and user in server management added try catch block to message received listener execution, to make them independent moved some feature flag methods to the feature flag service bean instead of the management service, as they used the FeatureEnum directly fixed feature disable text always rendering removed some non embed logging fixed message embed template added exception logging to message embedding
This commit is contained in:
@@ -16,7 +16,7 @@ import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
|
||||
@@ -52,7 +52,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
private ChannelManagementService channelManagementService;
|
||||
@@ -74,13 +74,14 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
||||
if(!commandManager.isCommand(event.getMessage())) {
|
||||
return;
|
||||
}
|
||||
UserInitiatedServerContext userInitiatedContext = buildTemplateParameter(event);
|
||||
CommandContext.CommandContextBuilder commandContextBuilder = CommandContext.builder()
|
||||
.author(event.getMember())
|
||||
.guild(event.getGuild())
|
||||
.channel(event.getTextChannel())
|
||||
.message(event.getMessage())
|
||||
.jda(event.getJDA())
|
||||
.userInitiatedContext(buildTemplateParameter(event));
|
||||
.userInitiatedContext(userInitiatedContext);
|
||||
Command foundCommand = null;
|
||||
try {
|
||||
String contentStripped = event.getMessage().getContentStripped();
|
||||
@@ -88,7 +89,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
||||
UnParsedCommandParameter unparsedParameter = new UnParsedCommandParameter(contentStripped);
|
||||
String commandName = commandManager.getCommandName(parameters.get(0), event.getGuild().getIdLong());
|
||||
foundCommand = commandManager.findCommandByParameters(commandName, unparsedParameter);
|
||||
Parameters parsedParameters = getParsedParameters(unparsedParameter, foundCommand, event.getMessage());
|
||||
Parameters parsedParameters = getParsedParameters(unparsedParameter, foundCommand, event.getMessage(), userInitiatedContext);
|
||||
CommandContext commandContext = commandContextBuilder.parameters(parsedParameters).build();
|
||||
CommandResult commandResult;
|
||||
if(foundCommand instanceof ConditionalCommand) {
|
||||
@@ -134,7 +135,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
||||
private UserInitiatedServerContext buildTemplateParameter(MessageReceivedEvent event) {
|
||||
AChannel channel = channelManagementService.loadChannel(event.getChannel().getIdLong());
|
||||
AServer server = serverManagementService.loadOrCreate(event.getGuild().getIdLong());
|
||||
AUserInAServer user = userManagementService.loadUser(event.getMember());
|
||||
AUserInAServer user = userInServerManagementService.loadUser(event.getMember());
|
||||
return UserInitiatedServerContext
|
||||
.builder()
|
||||
.channel(channel)
|
||||
@@ -147,7 +148,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
||||
.build();
|
||||
}
|
||||
|
||||
public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){
|
||||
public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message, UserInitiatedServerContext userInitiatedServerContext){
|
||||
List<Object> parsedParameters = new ArrayList<>();
|
||||
if(command.getConfiguration().getParameters() == null || command.getConfiguration().getParameters().isEmpty()) {
|
||||
return Parameters.builder().parameters(parsedParameters).build();
|
||||
@@ -189,9 +190,9 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
||||
}
|
||||
} else if(param.getType().equals(ARole.class)) {
|
||||
if(StringUtils.isNumeric(value)) {
|
||||
parsedParameters.add(roleManagementService.findRole(Long.parseLong(value)));
|
||||
parsedParameters.add(roleManagementService.findRole(Long.parseLong(value), userInitiatedServerContext.getServer()));
|
||||
} else {
|
||||
parsedParameters.add(roleManagementService.findRole(roleIterator.next().getIdLong()));
|
||||
parsedParameters.add(roleManagementService.findRole(roleIterator.next().getIdLong(), userInitiatedServerContext.getServer()));
|
||||
}
|
||||
} else if(param.getType().equals(Boolean.class)) {
|
||||
parsedParameters.add(Boolean.valueOf(value));
|
||||
|
||||
@@ -4,10 +4,16 @@ import dev.sheldan.abstracto.core.command.models.database.ACommand;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannelGroupCommand;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
import java.util.List;
|
||||
|
||||
public interface ChannelGroupCommandRepository extends JpaRepository<AChannelGroupCommand, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
AChannelGroupCommand findByCommandAndGroup(ACommand command, AChannelGroup group);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
List<AChannelGroupCommand> findByCommand(ACommand command);
|
||||
}
|
||||
|
||||
@@ -4,9 +4,14 @@ import dev.sheldan.abstracto.core.command.models.database.ACommand;
|
||||
import dev.sheldan.abstracto.core.command.models.database.ACommandInAServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
|
||||
@Repository
|
||||
public interface CommandInServerRepository extends JpaRepository<ACommandInAServer, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
ACommandInAServer findByServerReferenceAndCommandReference(AServer server, ACommand command);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,12 @@ package dev.sheldan.abstracto.core.command.repository;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.models.database.ACommand;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
|
||||
public interface CommandRepository extends JpaRepository<ACommand, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
ACommand findByName(String name);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,12 @@ package dev.sheldan.abstracto.core.command.repository;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.models.database.AModule;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
|
||||
public interface ModuleRepository extends JpaRepository<AModule, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
AModule findByName(String name);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package dev.sheldan.abstracto.core.commands.config;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
import dev.sheldan.abstracto.core.config.features.CoreFeatures;
|
||||
import dev.sheldan.abstracto.core.service.CacheServiceBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class ClearCache extends AbstractConditionableCommand {
|
||||
|
||||
@Autowired
|
||||
private CacheServiceBean cacheServiceBean;
|
||||
|
||||
@Override
|
||||
public CommandResult execute(CommandContext commandContext) {
|
||||
cacheServiceBean.clearCaches();
|
||||
return CommandResult.fromSuccess();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandConfiguration getConfiguration() {
|
||||
List<Parameter> parameters = new ArrayList<>();
|
||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
||||
return CommandConfiguration.builder()
|
||||
.name("clearCache")
|
||||
.module(ConfigModuleInterface.CONFIG)
|
||||
.parameters(parameters)
|
||||
.help(helpInfo)
|
||||
.templated(true)
|
||||
.causesReaction(true)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureEnum getFeature() {
|
||||
return CoreFeatures.CORE_FEATURE;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.sheldan.abstracto.core;
|
||||
package dev.sheldan.abstracto.core.config;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -35,7 +35,7 @@ public class FeatureFlagListener implements ServerConfigListener {
|
||||
String featureKey = featureFlagKey.getFeature().getKey();
|
||||
AFeature feature = featureManagementService.getFeature(featureKey);
|
||||
boolean featureFlagValue = BooleanUtils.toBoolean(environment.getProperty("abstracto.features." + featureKey, "false"));
|
||||
if(!service.getFeatureFlag(feature, server.getId()).isPresent()) {
|
||||
if(service.getFeatureFlag(feature, server.getId()) == null) {
|
||||
service.createFeatureFlag(feature, server.getId(), featureFlagValue);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -3,7 +3,7 @@ package dev.sheldan.abstracto.core.listener;
|
||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
@@ -26,7 +26,7 @@ public class JoinListenerBean extends ListenerAdapter {
|
||||
private FeatureFlagService featureFlagService;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@@ -37,7 +37,7 @@ public class JoinListenerBean extends ListenerAdapter {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
AUserInAServer aUserInAServer = userManagementService.loadUser(event.getMember());
|
||||
AUserInAServer aUserInAServer = userInServerManagementService.loadUser(event.getMember());
|
||||
executeListener(event, joinListener, aUserInAServer);
|
||||
} catch (Exception e) {
|
||||
log.error("Listener {} failed with exception:", joinListener.getClass().getName(), e);
|
||||
|
||||
@@ -27,16 +27,20 @@ public class MessageReceivedListenerBean extends ListenerAdapter {
|
||||
private FeatureFlagService featureFlagService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void onGuildMessageReceived(@Nonnull GuildMessageReceivedEvent event) {
|
||||
messageCache.putMessageInCache(event.getMessage());
|
||||
listenerList.forEach(messageReceivedListener -> {
|
||||
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(messageReceivedListener.getFeature());
|
||||
if(!featureFlagService.isFeatureEnabled(feature, event.getGuild().getIdLong())) {
|
||||
return;
|
||||
try {
|
||||
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(messageReceivedListener.getFeature());
|
||||
if(!featureFlagService.isFeatureEnabled(feature, event.getGuild().getIdLong())) {
|
||||
return;
|
||||
}
|
||||
messageReceivedListener.execute(event.getMessage());
|
||||
} catch (Exception e) {
|
||||
log.error("Listener {} had exception when executing.", messageReceivedListener, e);
|
||||
}
|
||||
messageReceivedListener.execute(event.getMessage());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.service.BotService;
|
||||
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
|
||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||
@@ -33,7 +33,7 @@ public class ReactionUpdatedListener extends ListenerAdapter {
|
||||
private MessageCache messageCache;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
private List<ReactedAddedListener> addedListenerList;
|
||||
@@ -95,7 +95,7 @@ public class ReactionUpdatedListener extends ListenerAdapter {
|
||||
|
||||
@Transactional
|
||||
public void callAddedListeners(@Nonnull GuildMessageReactionAddEvent event, CachedMessage cachedMessage, CachedReaction reaction) {
|
||||
AUserInAServer userInAServer = userManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
|
||||
AUserInAServer userInAServer = userInServerManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
|
||||
addReactionIfNotThere(cachedMessage, reaction, userInAServer.getUserReference());
|
||||
addedListenerList.forEach(reactedAddedListener -> {
|
||||
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(reactedAddedListener.getFeature());
|
||||
@@ -130,7 +130,7 @@ public class ReactionUpdatedListener extends ListenerAdapter {
|
||||
|
||||
@Transactional
|
||||
public void callRemoveListeners(@Nonnull GuildMessageReactionRemoveEvent event, CachedMessage cachedMessage, CachedReaction reaction) {
|
||||
AUserInAServer userInAServer = userManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
|
||||
AUserInAServer userInAServer = userInServerManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
|
||||
removeReactionIfThere(cachedMessage, reaction, userInAServer.getUserReference());
|
||||
reactionRemovedListener.forEach(reactionRemovedListener -> {
|
||||
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(reactionRemovedListener.getFeature());
|
||||
|
||||
@@ -37,6 +37,7 @@ public class RoleListener extends ListenerAdapter {
|
||||
@Override
|
||||
@Transactional
|
||||
public void onRoleDelete(@Nonnull RoleDeleteEvent event) {
|
||||
roleService.markDeleted(event.getRole());
|
||||
AServer server = serverManagementService.loadOrCreate(event.getGuild().getIdLong());
|
||||
roleService.markDeleted(event.getRole(), server);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,10 +3,16 @@ package dev.sheldan.abstracto.core.repository;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
import java.util.List;
|
||||
|
||||
public interface ChannelGroupRepository extends JpaRepository<AChannelGroup, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
AChannelGroup findByGroupNameAndServer(String name, AServer server);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
List<AChannelGroup> findByServer(AServer server);
|
||||
}
|
||||
|
||||
@@ -2,11 +2,15 @@ package dev.sheldan.abstracto.core.repository;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface ChannelRepository extends JpaRepository<AChannel, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
List<AChannel> findAll();
|
||||
}
|
||||
|
||||
@@ -2,7 +2,12 @@ package dev.sheldan.abstracto.core.repository;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AConfig;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
|
||||
public interface ConfigRepository extends JpaRepository<AConfig, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
AConfig findAConfigByServerIdAndName(Long serverId, String name);
|
||||
}
|
||||
|
||||
@@ -3,10 +3,17 @@ package dev.sheldan.abstracto.core.repository;
|
||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
|
||||
@Repository
|
||||
public interface EmoteRepository extends JpaRepository<AEmote, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
AEmote findAEmoteByNameAndServerRef(String name, AServer server);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
boolean existsByNameAndServerRef(String name, AServer server);
|
||||
}
|
||||
|
||||
@@ -4,10 +4,16 @@ import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
import java.util.List;
|
||||
|
||||
public interface FeatureFlagRepository extends JpaRepository<AFeatureFlag, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
AFeatureFlag findByServerAndFeature(AServer server, AFeature key);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
List<AFeatureFlag> findAllByServer(AServer server);
|
||||
}
|
||||
|
||||
@@ -2,9 +2,14 @@ package dev.sheldan.abstracto.core.repository;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
|
||||
@Repository
|
||||
public interface FeatureRepository extends JpaRepository<AFeature, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
AFeature findByKey(String key);
|
||||
}
|
||||
|
||||
@@ -3,11 +3,15 @@ package dev.sheldan.abstracto.core.repository;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
|
||||
@Repository
|
||||
public interface PostTargetRepository extends JpaRepository<PostTarget, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
PostTarget findPostTargetByNameAndServerReference(String name, AServer server);
|
||||
|
||||
}
|
||||
|
||||
@@ -4,10 +4,17 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
|
||||
@Repository
|
||||
public interface UserInServerRepository extends JpaRepository<AUserInAServer, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
AUserInAServer findByServerReferenceAndUserReference(AServer serverId, AUser userId);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
boolean existsByServerReferenceAndUserReference(AServer server, AUser user);
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.persistence.EntityManagerFactory;
|
||||
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class CacheServiceBean {
|
||||
|
||||
private SessionFactory sessionFactory;
|
||||
|
||||
@Autowired
|
||||
public CacheServiceBean(EntityManagerFactory factory) {
|
||||
SessionFactory unWrapped = factory.unwrap(SessionFactory.class);
|
||||
if(unWrapped == null){
|
||||
throw new AbstractoRunTimeException("Factory is not a hibernate factory.");
|
||||
}
|
||||
this.sessionFactory = unWrapped;
|
||||
}
|
||||
|
||||
public void clearCaches() {
|
||||
sessionFactory.getCache().evictAllRegions();
|
||||
}
|
||||
}
|
||||
@@ -35,11 +35,6 @@ public class ConfigServiceBean implements ConfigService{
|
||||
return config.getStringValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createDoubleValueIfNotExist(String name, Long serverId, Double value) {
|
||||
configManagementService.createIfNotExists(serverId, name, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDoubleValue(String name, Long serverId, Double value) {
|
||||
if(configManagementService.configExists(serverId, name)) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.DynamicKeyLoader;
|
||||
import dev.sheldan.abstracto.core.config.DynamicKeyLoader;
|
||||
import dev.sheldan.abstracto.core.exception.EmoteException;
|
||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
|
||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.core.exception.FeatureNotFoundException;
|
||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||
@@ -20,6 +23,9 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
||||
@Autowired
|
||||
private FeatureFlagManagementService managementService;
|
||||
|
||||
@Autowired
|
||||
private FeatureManagementService featureManagementService;
|
||||
|
||||
@Autowired
|
||||
private List<FeatureConfig> availableFeatures;
|
||||
|
||||
@@ -29,12 +35,12 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
||||
|
||||
@Override
|
||||
public boolean isFeatureEnabled(FeatureConfig name, Long serverId) {
|
||||
return managementService.getFeatureFlagValue(name.getFeature(), serverId);
|
||||
return getFeatureFlagValue(name.getFeature(), serverId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFeatureEnabled(FeatureConfig name, AServer server) {
|
||||
return managementService.getFeatureFlagValue(name.getFeature(), server);
|
||||
return getFeatureFlagValue(name.getFeature(), server);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -49,7 +55,7 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
||||
if(!doesFeatureExist(name)) {
|
||||
throw new FeatureNotFoundException("Feature not found.", feature.getKey(), getFeaturesAsList());
|
||||
}
|
||||
managementService.updateFeatureFlag(feature, server, true);
|
||||
updateFeatureFlag(feature, server, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -64,7 +70,7 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
||||
if(!doesFeatureExist(name)) {
|
||||
throw new FeatureNotFoundException("Feature not found.", feature.getKey(), getFeaturesAsList());
|
||||
}
|
||||
managementService.updateFeatureFlag(feature, server, false);
|
||||
updateFeatureFlag(feature, server, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -115,4 +121,28 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
||||
}
|
||||
throw new AbstractoRunTimeException(String.format("Feature %s not found.", key));
|
||||
}
|
||||
@Override
|
||||
public boolean getFeatureFlagValue(FeatureEnum key, Long serverId) {
|
||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||
return getFeatureFlagValue(key, server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getFeatureFlagValue(FeatureEnum key, AServer server) {
|
||||
AFeature feature = featureManagementService.getFeature(key.getKey());
|
||||
AFeatureFlag featureFlag = managementService.getFeatureFlag(feature, server);
|
||||
return featureFlag.isEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AFeatureFlag updateFeatureFlag(FeatureEnum key, Long serverId, Boolean newValue) {
|
||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||
return updateFeatureFlag(key, server, newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AFeatureFlag updateFeatureFlag(FeatureEnum key, AServer server, Boolean newValue) {
|
||||
AFeature feature = featureManagementService.getFeature(key.getKey());
|
||||
return managementService.setFeatureFlagValue(feature, server, newValue);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.*;
|
||||
import net.dv8tion.jda.api.requests.restaction.pagination.ReactionPaginationAction;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
import org.springframework.cache.annotation.CachePut;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
@@ -26,6 +27,7 @@ import java.util.concurrent.ExecutionException;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
@CacheConfig(cacheNames = "messages")
|
||||
public class MessageCacheBean implements MessageCache {
|
||||
|
||||
@Autowired
|
||||
@@ -40,7 +42,7 @@ public class MessageCacheBean implements MessageCache {
|
||||
private MessageCache self;
|
||||
|
||||
@Override
|
||||
@CachePut(key = "#message.id", cacheNames = "messages")
|
||||
@CachePut(key = "#message.id")
|
||||
public CompletableFuture<CachedMessage> putMessageInCache(Message message) {
|
||||
log.info("Adding message {} to cache", message.getId());
|
||||
CompletableFuture<CachedMessage> future = new CompletableFuture<>();
|
||||
@@ -56,14 +58,14 @@ public class MessageCacheBean implements MessageCache {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(key = "#message.id", cacheNames = "messages")
|
||||
@Cacheable(key = "#message.id")
|
||||
public CompletableFuture<CachedMessage> getMessageFromCache(Message message) {
|
||||
log.info("Retrieving message {}", message.getId());
|
||||
return getMessageFromCache(message.getGuild().getIdLong(), message.getChannel().getIdLong(), message.getIdLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(key = "#messageId.toString()", cacheNames = "messages")
|
||||
@Cacheable(key = "#messageId.toString()")
|
||||
public CompletableFuture<CachedMessage> getMessageFromCache(Long guildId, Long textChannelId, Long messageId) {
|
||||
log.info("Retrieving message with parameters");
|
||||
|
||||
@@ -204,4 +206,5 @@ public class MessageCacheBean implements MessageCache {
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.DynamicKeyLoader;
|
||||
import dev.sheldan.abstracto.core.config.DynamicKeyLoader;
|
||||
import dev.sheldan.abstracto.core.exception.ChannelException;
|
||||
import dev.sheldan.abstracto.core.exception.GuildException;
|
||||
import dev.sheldan.abstracto.core.service.management.PostTargetManagement;
|
||||
|
||||
@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.core.service;
|
||||
import dev.sheldan.abstracto.core.exception.GuildException;
|
||||
import dev.sheldan.abstracto.core.exception.RoleException;
|
||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -59,13 +60,13 @@ public class RoleServiceBean implements RoleService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDeleted(Role role) {
|
||||
markDeleted(role.getIdLong());
|
||||
public void markDeleted(Role role, AServer server) {
|
||||
markDeleted(role.getIdLong(), server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDeleted(Long id) {
|
||||
ARole role = roleManagementService.findRole(id);
|
||||
public void markDeleted(Long id, AServer server) {
|
||||
ARole role = roleManagementService.findRole(id, server);
|
||||
if(role != null) {
|
||||
roleManagementService.markDeleted(role);
|
||||
} else {
|
||||
|
||||
@@ -54,7 +54,6 @@ public class ChannelGroupManagementServiceBean implements ChannelGroupManagement
|
||||
}
|
||||
channelGroup.getChannels().add(channel);
|
||||
channel.getGroups().add(channelGroup);
|
||||
channelGroupRepository.save(channelGroup);
|
||||
return channelGroup;
|
||||
}
|
||||
|
||||
@@ -66,7 +65,6 @@ public class ChannelGroupManagementServiceBean implements ChannelGroupManagement
|
||||
}
|
||||
channelGroup.getChannels().removeIf(channelInGroupPredicate);
|
||||
channel.getGroups().removeIf(channelGroup1 -> channelGroup1.getId().equals(channelGroup.getId()));
|
||||
channelGroupRepository.save(channelGroup);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -34,10 +34,10 @@ public class ChannelManagementServiceBean implements ChannelManagementService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markAsDeleted(Long id) {
|
||||
public AChannel markAsDeleted(Long id) {
|
||||
AChannel channel = loadChannel(id);
|
||||
channel.setDeleted(true);
|
||||
repository.save(channel);
|
||||
return channel;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,10 +3,12 @@ package dev.sheldan.abstracto.core.service.management;
|
||||
import dev.sheldan.abstracto.core.models.database.AConfig;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.repository.ConfigRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class ConfigManagementServiceBean implements ConfigManagementService {
|
||||
|
||||
@Autowired
|
||||
@@ -16,23 +18,25 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Override
|
||||
public void setOrCreateStringValue(Long serverId, String name, String value) {
|
||||
public AConfig setOrCreateStringValue(Long serverId, String name, String value) {
|
||||
AConfig config = loadConfig(serverId, name);
|
||||
if(config == null) {
|
||||
createConfig(serverId, name, value);
|
||||
} else {
|
||||
config.setStringValue(value);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOrCreateDoubleValue(Long serverId, String name, Double value) {
|
||||
public AConfig setOrCreateDoubleValue(Long serverId, String name, Double value) {
|
||||
AConfig config = loadConfig(serverId, name);
|
||||
if(config == null) {
|
||||
createConfig(serverId, name, value);
|
||||
} else {
|
||||
config.setDoubleValue(value);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -90,15 +94,17 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDoubleValue(Long serverId, String name, Double value) {
|
||||
public AConfig setDoubleValue(Long serverId, String name, Double value) {
|
||||
AConfig config = loadConfig(serverId, name);
|
||||
config.setDoubleValue(value);
|
||||
return config;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStringValue(Long serverId, String name, String value) {
|
||||
public AConfig setStringValue(Long serverId, String name, String value) {
|
||||
AConfig config = loadConfig(serverId, name);
|
||||
config.setStringValue(value);
|
||||
return config;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.DynamicKeyLoader;
|
||||
import dev.sheldan.abstracto.core.config.DynamicKeyLoader;
|
||||
import dev.sheldan.abstracto.core.exception.EmoteException;
|
||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
@@ -145,30 +145,6 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
|
||||
return repository.existsByNameAndServerRef(name, server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated) {
|
||||
AEmote emote = AEmote.builder()
|
||||
.animated(animated)
|
||||
.custom(true)
|
||||
.emoteKey(emoteKey)
|
||||
.emoteId(emoteId)
|
||||
.name(name)
|
||||
.build();
|
||||
repository.save(emote);
|
||||
return emote;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AEmote createDefaultEmote(String name, String emoteKey) {
|
||||
AEmote emote = AEmote.builder()
|
||||
.custom(false)
|
||||
.emoteKey(emoteKey)
|
||||
.name(name)
|
||||
.build();
|
||||
repository.save(emote);
|
||||
return emote;
|
||||
}
|
||||
|
||||
private void validateEmoteName(String name) {
|
||||
List<String> possibleEmotes = dynamicKeyLoader.getEmoteNamesAsList();
|
||||
if(!possibleEmotes.contains(name)) {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
|
||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
@@ -25,13 +24,13 @@ public class FeatureFlagManagementServiceBean implements FeatureFlagManagementSe
|
||||
private FeatureManagementService featureManagementService;
|
||||
|
||||
@Override
|
||||
public void createFeatureFlag(AFeature feature, Long serverId, Boolean newValue) {
|
||||
public AFeatureFlag createFeatureFlag(AFeature feature, Long serverId, Boolean newValue) {
|
||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||
createFeatureFlag(feature, server, newValue);
|
||||
return createFeatureFlag(feature, server, newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createFeatureFlag(AFeature feature, AServer server, Boolean newValue) {
|
||||
public AFeatureFlag createFeatureFlag(AFeature feature, AServer server, Boolean newValue) {
|
||||
AFeatureFlag featureFlag = AFeatureFlag
|
||||
.builder()
|
||||
.enabled(newValue)
|
||||
@@ -39,52 +38,37 @@ public class FeatureFlagManagementServiceBean implements FeatureFlagManagementSe
|
||||
.server(server)
|
||||
.build();
|
||||
repository.save(featureFlag);
|
||||
return featureFlag;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean getFeatureFlagValue(FeatureEnum key, Long serverId) {
|
||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||
return getFeatureFlagValue(key, server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getFeatureFlagValue(FeatureEnum key, AServer server) {
|
||||
AFeature feature = featureManagementService.getFeature(key.getKey());
|
||||
Optional<AFeatureFlag> featureFlag = getFeatureFlag(feature, server);
|
||||
return featureFlag.isPresent() && featureFlag.get().isEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFeatureFlag(FeatureEnum key, Long serverId, Boolean newValue) {
|
||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||
updateFeatureFlag(key, server, newValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFeatureFlag(FeatureEnum key, AServer server, Boolean newValue) {
|
||||
AFeature feature = featureManagementService.getFeature(key.getKey());
|
||||
Optional<AFeatureFlag> existing = getFeatureFlag(feature, server);
|
||||
if(existing.isPresent()) {
|
||||
AFeatureFlag flag = existing.get();
|
||||
flag.setEnabled(newValue);
|
||||
repository.save(flag);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<AFeatureFlag> getFeatureFlag(AFeature feature, Long serverId) {
|
||||
public AFeatureFlag getFeatureFlag(AFeature feature, Long serverId) {
|
||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||
return getFeatureFlag(feature, server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<AFeatureFlag> getFeatureFlag(AFeature key, AServer server) {
|
||||
return Optional.ofNullable(repository.findByServerAndFeature(server, key));
|
||||
public AFeatureFlag getFeatureFlag(AFeature feature, AServer server) {
|
||||
return repository.findByServerAndFeature(server, feature);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AFeatureFlag> getFeatureFlagsOfServer(AServer server) {
|
||||
return repository.findAllByServer(server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AFeatureFlag setFeatureFlagValue(AFeature feature, Long serverId, Boolean newValue) {
|
||||
AFeatureFlag featureFlag = getFeatureFlag(feature, serverId);
|
||||
featureFlag.setEnabled(newValue);
|
||||
return featureFlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AFeatureFlag setFeatureFlagValue(AFeature feature, AServer server, Boolean newValue) {
|
||||
AFeatureFlag featureFlag = getFeatureFlag(feature, server);
|
||||
featureFlag.setEnabled(newValue);
|
||||
return featureFlag;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.DynamicKeyLoader;
|
||||
import dev.sheldan.abstracto.core.config.DynamicKeyLoader;
|
||||
import dev.sheldan.abstracto.core.exception.PostTargetException;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
@@ -9,7 +9,6 @@ import dev.sheldan.abstracto.core.service.PostTargetService;
|
||||
import dev.sheldan.abstracto.core.repository.PostTargetRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@@ -32,39 +31,40 @@ public class PostTargetManagementBean implements PostTargetManagement {
|
||||
private PostTargetService postTargetService;
|
||||
|
||||
@Override
|
||||
public void createPostTarget(String name, AServer server, AChannel targetChannel) {
|
||||
public PostTarget createPostTarget(String name, AServer server, AChannel targetChannel) {
|
||||
if(!postTargetService.validPostTarget(name)) {
|
||||
throw new PostTargetException("PostTarget not found. Possible values are: " + String.join(", ", dynamicKeyLoader.getPostTargetsAsList()));
|
||||
}
|
||||
log.info("Creating post target {} pointing towards {}", name, targetChannel);
|
||||
postTargetRepository.save(PostTarget.builder().name(name).channelReference(targetChannel).serverReference(server).build());
|
||||
PostTarget build = PostTarget.builder().name(name).channelReference(targetChannel).serverReference(server).build();
|
||||
postTargetRepository.save(build);
|
||||
return build;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createOrUpdate(String name, AServer server, AChannel targetChannel) {
|
||||
public PostTarget createOrUpdate(String name, AServer server, AChannel targetChannel) {
|
||||
PostTarget existing = postTargetRepository.findPostTargetByNameAndServerReference(name, server);
|
||||
if(existing == null){
|
||||
this.createPostTarget(name, server, targetChannel);
|
||||
return this.createPostTarget(name, server, targetChannel);
|
||||
} else {
|
||||
this.updatePostTarget(existing, server, targetChannel);
|
||||
return this.updatePostTarget(existing, server, targetChannel);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createOrUpdate(String name, AServer server, Long channelId) {
|
||||
public PostTarget createOrUpdate(String name, AServer server, Long channelId) {
|
||||
AChannel dbChannel = channelManagementService.loadChannel(channelId);
|
||||
createOrUpdate(name, server, dbChannel);
|
||||
return createOrUpdate(name, server, dbChannel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createOrUpdate(String name, Long serverId, Long channelId) {
|
||||
public PostTarget createOrUpdate(String name, Long serverId, Long channelId) {
|
||||
AChannel dbChannel = channelManagementService.loadChannel(channelId);
|
||||
AServer dbServer = serverManagementService.loadOrCreate(serverId);
|
||||
createOrUpdate(name, dbServer, dbChannel);
|
||||
return createOrUpdate(name, dbServer, dbChannel);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable("posttargets")
|
||||
public PostTarget getPostTarget(String name, AServer server) {
|
||||
return postTargetRepository.findPostTargetByNameAndServerReference(name, server);
|
||||
}
|
||||
@@ -76,8 +76,9 @@ public class PostTargetManagementBean implements PostTargetManagement {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePostTarget(PostTarget target, AServer server, AChannel newTargetChannel) {
|
||||
postTargetRepository.getOne(target.getId()).setChannelReference(newTargetChannel);
|
||||
public PostTarget updatePostTarget(PostTarget target, AServer server, AChannel newTargetChannel) {
|
||||
target.setChannelReference(newTargetChannel);
|
||||
return target;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ public class RoleManagementServiceBean implements RoleManagementService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ARole findRole(Long id) {
|
||||
public ARole findRole(Long id, AServer server) {
|
||||
return repository.getOne(id);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.repository.UserInServerRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class UserInServerManagementServiceBean implements UserInServerManagementService {
|
||||
|
||||
@Autowired
|
||||
private UserInServerRepository userInServerRepository;
|
||||
|
||||
@Autowired
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
|
||||
|
||||
@Override
|
||||
public AUserInAServer loadUser(Long serverId, Long userId) {
|
||||
AUser user = userManagementService.loadUser(userId);
|
||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||
return loadUser(server, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUserInAServer loadUser(AServer server, AUser user) {
|
||||
if(userInServerRepository.existsByServerReferenceAndUserReference(server, user)) {
|
||||
return userInServerRepository.findByServerReferenceAndUserReference(server, user);
|
||||
} else {
|
||||
return this.createUserInServer(server.getId(), user.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUserInAServer loadUser(Member member) {
|
||||
return this.loadUser(member.getGuild().getIdLong(), member.getIdLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUserInAServer createUserInServer(Member member) {
|
||||
return this.createUserInServer(member.getGuild().getIdLong(), member.getIdLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUserInAServer createUserInServer(Long guildId, Long userId) {
|
||||
AUserInAServer aUserInAServer = serverManagementService.addUserToServer(guildId, userId);
|
||||
userInServerRepository.save(aUserInAServer);
|
||||
return aUserInAServer;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.repository.UserInServerRepository;
|
||||
import dev.sheldan.abstracto.core.repository.UserRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
@@ -14,57 +11,12 @@ import org.springframework.stereotype.Component;
|
||||
@Slf4j
|
||||
public class UserManagementServiceBean implements UserManagementService {
|
||||
|
||||
@Autowired
|
||||
private UserInServerRepository userInServerRepository;
|
||||
|
||||
@Autowired
|
||||
private UserRepository userRepository;
|
||||
|
||||
@Autowired
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
|
||||
@Override
|
||||
public AUserInAServer loadUser(Long serverId, Long userId) {
|
||||
AUser user = this.loadUser(userId);
|
||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||
return loadUser(server, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUserInAServer loadUser(AServer server, AUser user) {
|
||||
if(userInServerRepository.existsByServerReferenceAndUserReference(server, user)) {
|
||||
return userInServerRepository.findByServerReferenceAndUserReference(server, user);
|
||||
} else {
|
||||
return this.createUserInServer(server.getId(), user.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUserInAServer loadUser(Member member) {
|
||||
return this.loadUser(member.getGuild().getIdLong(), member.getIdLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUserInAServer loadUserInServer(Long userInServerId) {
|
||||
return userInServerRepository.getOne(userInServerId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUserInAServer createUserInServer(Member member) {
|
||||
return this.createUserInServer(member.getGuild().getIdLong(), member.getIdLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUserInAServer createUserInServer(Long guildId, Long userId) {
|
||||
AUserInAServer aUserInAServer = serverManagementService.addUserToServer(guildId, userId);
|
||||
userInServerRepository.save(aUserInAServer);
|
||||
return aUserInAServer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AUser createUser(Member member) {
|
||||
return createUser(member.getIdLong());
|
||||
return createUser(member.getIdLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,11 +7,19 @@ spring.jpa.show-sql = false
|
||||
spring.jpa.hibernate.ddl-auto = update
|
||||
spring.jpa.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
|
||||
spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy
|
||||
spring.jpa.properties.hibernate.format_sql = false
|
||||
log4j.logger.org.hibernate.SQL=info
|
||||
log4j.logger.org.hibernate.type.descriptor.sql=trace
|
||||
log4j.logger.org.hibernate.type=trace
|
||||
|
||||
spring.jpa.properties.hibernate.generate_statistics = false
|
||||
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
|
||||
spring.jpa.properties.hibernate.cache.use_query_cache=true
|
||||
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
|
||||
spring.jpa.properties.javax.persistence.sharedCache.mode=ENABLE_SELECTIVE
|
||||
spring.jpa.properties.hibernate.javax.cache.missing_cache_strategy = create
|
||||
spring.cache.jcache.config=classpath:ehcache.xml
|
||||
|
||||
logging.level.dev.sheldan=info
|
||||
|
||||
spring.cache.cache-names=messages
|
||||
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<config
|
||||
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
|
||||
xmlns='http://www.ehcache.org/v3'
|
||||
xsi:schemaLocation="
|
||||
http://www.ehcache.org/v3
|
||||
http://www.ehcache.org/schema/ehcache-core-3.8-1.xsd">
|
||||
<cache uses-template="default" alias="messages">
|
||||
<key-type>java.lang.String</key-type>
|
||||
<value-type>java.util.concurrent.CompletableFuture</value-type>
|
||||
<expiry>
|
||||
<ttl unit="seconds">600</ttl>
|
||||
</expiry>
|
||||
|
||||
<resources>
|
||||
<heap unit="entries">500</heap>
|
||||
</resources>
|
||||
</cache>
|
||||
<cache-template name="default">
|
||||
<expiry>
|
||||
<ttl unit="seconds">600</ttl>
|
||||
</expiry>
|
||||
<resources>
|
||||
<heap>50</heap>
|
||||
</resources>
|
||||
</cache-template>
|
||||
</config>
|
||||
Reference in New Issue
Block a user