diff --git a/abstracto-application/command/command-base/channels/src/main/java/dev/sheldan/abstracto/command/channels/SetPostTargetCommand.java b/abstracto-application/command/command-base/channels/src/main/java/dev/sheldan/abstracto/command/channels/SetPostTargetCommand.java index e1d3218f0..21d332ca6 100644 --- a/abstracto-application/command/command-base/channels/src/main/java/dev/sheldan/abstracto/command/channels/SetPostTargetCommand.java +++ b/abstracto-application/command/command-base/channels/src/main/java/dev/sheldan/abstracto/command/channels/SetPostTargetCommand.java @@ -2,11 +2,11 @@ package dev.sheldan.abstracto.command.channels; import dev.sheldan.abstracto.command.Command; import dev.sheldan.abstracto.command.execution.Configuration; -import dev.sheldan.abstracto.command.execution.Context; +import dev.sheldan.abstracto.command.execution.CommandContext; import dev.sheldan.abstracto.command.execution.Parameter; import dev.sheldan.abstracto.command.execution.Result; -import dev.sheldan.abstracto.core.service.ChannelService; -import dev.sheldan.abstracto.core.service.PostTargetService; +import dev.sheldan.abstracto.core.management.ChannelManagementService; +import dev.sheldan.abstracto.core.management.PostTargetManagement; import net.dv8tion.jda.api.entities.GuildChannel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -19,17 +19,17 @@ import java.util.List; public class SetPostTargetCommand implements Command { @Autowired - private PostTargetService postTargetService; + private PostTargetManagement postTargetManagement; @Autowired - private ChannelService channelService; + private ChannelManagementService channelManagementService; @Override @Transactional - public Result execute(Context context) { - GuildChannel channel = (GuildChannel) context.getParameters().getParameters().get(1); - String targetName = (String) context.getParameters().getParameters().get(0); - postTargetService.createOrUpdate(targetName, channel.getIdLong(), channel.getGuild().getIdLong()); + public Result execute(CommandContext commandContext) { + GuildChannel channel = (GuildChannel) commandContext.getParameters().getParameters().get(1); + String targetName = (String) commandContext.getParameters().getParameters().get(0); + postTargetManagement.createOrUpdate(targetName, channel.getIdLong(), channel.getGuild().getIdLong()); return Result.fromSuccess(); } diff --git a/abstracto-application/command/command-base/pom.xml b/abstracto-application/command/command-base/pom.xml index 7ec7a2b40..aba258069 100644 --- a/abstracto-application/command/command-base/pom.xml +++ b/abstracto-application/command/command-base/pom.xml @@ -26,22 +26,4 @@ - - - - maven-compiler-plugin - - - - only - - dev.sheldan.abstracto.command.annotations.CommandSpecProcessor - - - - - - - - \ No newline at end of file diff --git a/abstracto-application/command/command-base/support/src/main/java/dev/sheldan/abstracto/command/support/Help.java b/abstracto-application/command/command-base/support/src/main/java/dev/sheldan/abstracto/command/support/Help.java index fa6226a6d..f8611c13b 100644 --- a/abstracto-application/command/command-base/support/src/main/java/dev/sheldan/abstracto/command/support/Help.java +++ b/abstracto-application/command/command-base/support/src/main/java/dev/sheldan/abstracto/command/support/Help.java @@ -11,8 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Collections; -import java.util.HashMap; -import java.util.List; @Service @@ -23,10 +21,10 @@ public class Help implements Command { private ModuleRegistry registry; @Override - public Result execute(Context context) { + public Result execute(CommandContext commandContext) { CommandHierarchy commandStructure = registry.getDetailedModules(); StringBuilder sb = new StringBuilder(); - if(context.getParameters().getParameters().isEmpty()){ + if(commandContext.getParameters().getParameters().isEmpty()){ sb.append("Help | Module overview \n"); sb.append("```"); commandStructure.getRootModules().forEach(packedModule -> { @@ -35,7 +33,7 @@ public class Help implements Command { }); sb.append("```"); } else { - String parameterValue = context.getParameters().getParameters().get(0).toString(); + String parameterValue = commandContext.getParameters().getParameters().get(0).toString(); PackedModule module = commandStructure.getModuleWithName(parameterValue); if(module != null){ sb.append("Help | Module overview \n"); @@ -53,7 +51,7 @@ public class Help implements Command { } } - context.getChannel().sendMessage(sb.toString()).queue(); + commandContext.getChannel().sendMessage(sb.toString()).queue(); return Result.fromSuccess(); } diff --git a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Echo.java b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Echo.java index ff6e1e57a..b1ee351f1 100644 --- a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Echo.java +++ b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Echo.java @@ -3,10 +3,14 @@ package dev.sheldan.abstracto.command.utility; import dev.sheldan.abstracto.command.Command; import dev.sheldan.abstracto.command.HelpInfo; import dev.sheldan.abstracto.command.execution.Configuration; -import dev.sheldan.abstracto.command.execution.Context; +import dev.sheldan.abstracto.command.execution.CommandContext; import dev.sheldan.abstracto.command.execution.Parameter; import dev.sheldan.abstracto.command.execution.Result; +import dev.sheldan.abstracto.command.utility.model.EchoModel; +import dev.sheldan.abstracto.templating.TemplateService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @@ -14,13 +18,20 @@ import java.util.List; @Service public class Echo implements Command { + private static final String TEMPLATE_NAME = "echo"; + + @Autowired + private TemplateService templateService; + @Override - public Result execute(Context context) { + @Transactional + public Result execute(CommandContext commandContext) { StringBuilder sb = new StringBuilder(); - context.getParameters().getParameters().forEach(o -> { + commandContext.getParameters().getParameters().forEach(o -> { sb.append(o.toString()); }); - context.getChannel().sendMessage(sb.toString()).queue(); + EchoModel model = EchoModel.parentBuilder().parent(commandContext.getCommandTemplateContext()).text(sb.toString()).build(); + commandContext.getChannel().sendMessage(templateService.renderTemplate(TEMPLATE_NAME, model)).queue(); return Result.fromSuccess(); } diff --git a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Ping.java b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Ping.java index b279e2e86..d6ad9a612 100644 --- a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Ping.java +++ b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/Ping.java @@ -2,15 +2,14 @@ package dev.sheldan.abstracto.command.utility; import dev.sheldan.abstracto.command.Command; import dev.sheldan.abstracto.command.execution.Configuration; -import dev.sheldan.abstracto.command.execution.Context; +import dev.sheldan.abstracto.command.execution.CommandContext; import dev.sheldan.abstracto.command.execution.Result; +import dev.sheldan.abstracto.command.utility.model.PingModel; import dev.sheldan.abstracto.templating.TemplateService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; - @Service public class Ping implements Command { @@ -21,12 +20,11 @@ public class Ping implements Command { @Override @Transactional - public Result execute(Context context) { - long ping = context.getJda().getGatewayPing(); - HashMap parameters = new HashMap<>(); - parameters.put("latency", ping); - String text = templateService.renderTemplate(PING_TEMPLATE, parameters); - context.getChannel().sendMessage(text).queue(); + public Result execute(CommandContext commandContext) { + long ping = commandContext.getJda().getGatewayPing(); + PingModel model = PingModel.parentBuilder().parent(commandContext.getCommandTemplateContext()).latency(ping).build(); + String text = templateService.renderTemplate(PING_TEMPLATE, model); + commandContext.getChannel().sendMessage(text).queue(); return Result.fromSuccess(); } diff --git a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/EchoModel.java b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/EchoModel.java new file mode 100644 index 000000000..cae56578a --- /dev/null +++ b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/EchoModel.java @@ -0,0 +1,17 @@ +package dev.sheldan.abstracto.command.utility.model; + + +import dev.sheldan.abstracto.command.execution.CommandTemplateContext; +import lombok.Builder; +import lombok.Getter; + +@Getter +public class EchoModel extends CommandTemplateContext { + private String text; + + @Builder(builderMethodName = "parentBuilder") + private EchoModel(CommandTemplateContext parent, String text) { + super(parent); + this.text = text; + } +} diff --git a/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/PingModel.java b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/PingModel.java new file mode 100644 index 000000000..b8e13e6c5 --- /dev/null +++ b/abstracto-application/command/command-base/utility/src/main/java/dev/sheldan/abstracto/command/utility/model/PingModel.java @@ -0,0 +1,16 @@ +package dev.sheldan.abstracto.command.utility.model; + +import dev.sheldan.abstracto.command.execution.CommandTemplateContext; +import lombok.Builder; +import lombok.Getter; + +@Getter +public class PingModel extends CommandTemplateContext { + private Long latency; + + @Builder(builderMethodName = "parentBuilder") + private PingModel(CommandTemplateContext parent, Long latency) { + super(parent); + this.latency = latency; + } +} diff --git a/abstracto-application/command/command-base/utility/src/main/resources/seedData/templates/commands/echo/echo_en_US.ftl b/abstracto-application/command/command-base/utility/src/main/resources/seedData/templates/commands/echo/echo_en_US.ftl new file mode 100644 index 000000000..e07b42c79 --- /dev/null +++ b/abstracto-application/command/command-base/utility/src/main/resources/seedData/templates/commands/echo/echo_en_US.ftl @@ -0,0 +1 @@ +${text} \ No newline at end of file diff --git a/abstracto-application/command/command-int/pom.xml b/abstracto-application/command/command-int/pom.xml index 34bb48bb3..4e4ae2044 100644 --- a/abstracto-application/command/command-int/pom.xml +++ b/abstracto-application/command/command-int/pom.xml @@ -35,6 +35,12 @@ ${project.version} + + dev.sheldan.abstracto.core + core-interface + ${project.version} + + diff --git a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/Command.java b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/Command.java index 859bb679c..8c5644f3a 100644 --- a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/Command.java +++ b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/Command.java @@ -1,11 +1,11 @@ package dev.sheldan.abstracto.command; import dev.sheldan.abstracto.command.execution.Configuration; -import dev.sheldan.abstracto.command.execution.Context; +import dev.sheldan.abstracto.command.execution.CommandContext; import dev.sheldan.abstracto.command.execution.Result; public interface Command { - Result execute(Context context); + Result execute(CommandContext commandContext); Configuration getConfiguration(); } diff --git a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/PostCommandExecution.java b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/PostCommandExecution.java index c3cc3e507..409b8554d 100644 --- a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/PostCommandExecution.java +++ b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/PostCommandExecution.java @@ -1,8 +1,8 @@ package dev.sheldan.abstracto.command; -import dev.sheldan.abstracto.command.execution.Context; +import dev.sheldan.abstracto.command.execution.CommandContext; import dev.sheldan.abstracto.command.execution.Result; public interface PostCommandExecution { - void execute(Context context, Result result, Command command); + void execute(CommandContext commandContext, Result result, Command command); } diff --git a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/Context.java b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandContext.java similarity index 84% rename from abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/Context.java rename to abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandContext.java index 753b95e55..e54b4514d 100644 --- a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/Context.java +++ b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandContext.java @@ -10,11 +10,12 @@ import net.dv8tion.jda.api.entities.User; @Builder @Getter -public class Context { +public class CommandContext { private TextChannel channel; private Guild guild; private User author; private Message message; + private CommandTemplateContext commandTemplateContext; private Parameters parameters; private JDA jda; } diff --git a/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandTemplateContext.java b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandTemplateContext.java new file mode 100644 index 000000000..a648525ae --- /dev/null +++ b/abstracto-application/command/command-int/src/main/java/dev/sheldan/abstracto/command/execution/CommandTemplateContext.java @@ -0,0 +1,18 @@ +package dev.sheldan.abstracto.command.execution; + +import dev.sheldan.abstracto.core.models.AChannel; +import dev.sheldan.abstracto.core.models.AServer; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter @Builder @AllArgsConstructor +public class CommandTemplateContext { + private AChannel channel; + private AServer server; + + public CommandTemplateContext(CommandTemplateContext commandTemplateContext) { + this.channel = commandTemplateContext.channel; + this.server = commandTemplateContext.server; + } +} diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandManager.java b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandManager.java index 7c2290fab..5d2d965f8 100644 --- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandManager.java +++ b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandManager.java @@ -6,6 +6,7 @@ import dev.sheldan.abstracto.command.execution.Configuration; import dev.sheldan.abstracto.command.execution.Parameter; import dev.sheldan.abstracto.command.meta.CommandRegistry; import dev.sheldan.abstracto.command.meta.UnParsedCommandParameter; +import dev.sheldan.abstracto.commands.management.exception.CommandNotFoundException; import net.dv8tion.jda.api.entities.Message; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandReceivedHandler.java b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandReceivedHandler.java index d4291364c..d5e7efb24 100644 --- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandReceivedHandler.java +++ b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandReceivedHandler.java @@ -2,12 +2,12 @@ package dev.sheldan.abstracto.commands.management; import dev.sheldan.abstracto.command.Command; import dev.sheldan.abstracto.command.PostCommandExecution; -import dev.sheldan.abstracto.command.execution.Context; -import dev.sheldan.abstracto.command.execution.Parameter; -import dev.sheldan.abstracto.command.execution.Parameters; -import dev.sheldan.abstracto.command.execution.Result; +import dev.sheldan.abstracto.command.execution.*; import dev.sheldan.abstracto.command.meta.UnParsedCommandParameter; -import net.dv8tion.jda.api.entities.Guild; +import dev.sheldan.abstracto.core.management.ChannelManagementService; +import dev.sheldan.abstracto.core.management.ServerManagementService; +import dev.sheldan.abstracto.core.models.AChannel; +import dev.sheldan.abstracto.core.models.AServer; import net.dv8tion.jda.api.entities.GuildChannel; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; @@ -29,6 +29,12 @@ public class CommandReceivedHandler extends ListenerAdapter { @Autowired private PostCommandExecution execution; + @Autowired + private ServerManagementService serverManagementService; + + @Autowired + private ChannelManagementService channelManagementService; + @Override public void onMessageReceived(@Nonnull MessageReceivedEvent event) { if(!manager.isCommand(event.getMessage())) { @@ -40,16 +46,23 @@ public class CommandReceivedHandler extends ListenerAdapter { String withoutPrefix = parameters.get(0).substring(1); Command foundCommand = manager.findCommandByParameters(withoutPrefix, unparsedParameter); Parameters parsedParameters = getParsedParameters(unparsedParameter, foundCommand, event.getMessage()); - Context context = Context.builder() + CommandContext commandContext = CommandContext.builder() .author(event.getAuthor()) .guild(event.getGuild()) .channel(event.getTextChannel()) .message(event.getMessage()) .parameters(parsedParameters) .jda(event.getJDA()) + .commandTemplateContext(buildTemplateParameter(event)) .build(); - Result result = foundCommand.execute(context); - execution.execute(context, result, foundCommand); + Result result = foundCommand.execute(commandContext); + execution.execute(commandContext, result, foundCommand); + } + + private CommandTemplateContext buildTemplateParameter(MessageReceivedEvent event) { + AChannel channel = channelManagementService.loadChannel(event.getChannel().getIdLong()); + AServer server = serverManagementService.loadServer(event.getGuild().getIdLong()); + return CommandTemplateContext.builder().channel(channel).server(server).build(); } public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){ diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/ReactionPostExecution.java b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/ReactionPostExecution.java index c50472f67..6ba95bd4a 100644 --- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/ReactionPostExecution.java +++ b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/ReactionPostExecution.java @@ -2,16 +2,16 @@ package dev.sheldan.abstracto.commands.management; import dev.sheldan.abstracto.command.Command; import dev.sheldan.abstracto.command.PostCommandExecution; -import dev.sheldan.abstracto.command.execution.Context; +import dev.sheldan.abstracto.command.execution.CommandContext; import dev.sheldan.abstracto.command.execution.Result; import org.springframework.stereotype.Service; @Service public class ReactionPostExecution implements PostCommandExecution { @Override - public void execute(Context context, Result result, Command command) { + public void execute(CommandContext commandContext, Result result, Command command) { if(command.getConfiguration().isCausesReaction()){ - context.getMessage().addReaction("⭐").queue(); + commandContext.getMessage().addReaction("⭐").queue(); } } } diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandNotFoundException.java b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/exception/CommandNotFoundException.java similarity index 52% rename from abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandNotFoundException.java rename to abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/exception/CommandNotFoundException.java index 31923a1ac..c294cc42b 100644 --- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/CommandNotFoundException.java +++ b/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/exception/CommandNotFoundException.java @@ -1,4 +1,4 @@ -package dev.sheldan.abstracto.commands.management; +package dev.sheldan.abstracto.commands.management.exception; public class CommandNotFoundException extends RuntimeException { } diff --git a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/PostTargetException.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/exception/PostTargetException.java similarity index 73% rename from abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/PostTargetException.java rename to abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/exception/PostTargetException.java index c3c30fa0b..5f1b914ee 100644 --- a/abstracto-application/command/command-management/src/main/java/dev/sheldan/abstracto/commands/management/PostTargetException.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/exception/PostTargetException.java @@ -1,4 +1,4 @@ -package dev.sheldan.abstracto.commands.management; +package dev.sheldan.abstracto.core.exception; public class PostTargetException extends RuntimeException { public PostTargetException(String message) { diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementServiceBean.java new file mode 100644 index 000000000..cb6999be3 --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementServiceBean.java @@ -0,0 +1,25 @@ +package dev.sheldan.abstracto.core.service.management; + +import dev.sheldan.abstracto.core.models.AChannel; +import dev.sheldan.abstracto.core.models.AChannelType; +import dev.sheldan.abstracto.core.management.ChannelManagementService; +import dev.sheldan.abstracto.repository.ChannelRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ChannelManagementServiceBean implements ChannelManagementService { + + @Autowired + private ChannelRepository repository; + + @Override + public AChannel loadChannel(Long id) { + return repository.getOne(id); + } + + @Override + public AChannel createChannel(Long id, AChannelType type) { + return repository.save(AChannel.builder().id(id).type(type).build()); + } +} diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagementBean.java similarity index 68% rename from abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceServiceBean.java rename to abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagementBean.java index 468bc13b9..879bf51af 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagementBean.java @@ -1,28 +1,29 @@ -package dev.sheldan.abstracto.core.service; +package dev.sheldan.abstracto.core.service.management; -import dev.sheldan.abstracto.commands.management.PostTargetException; +import dev.sheldan.abstracto.core.exception.PostTargetException; import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.PostTarget; +import dev.sheldan.abstracto.core.management.ChannelManagementService; +import dev.sheldan.abstracto.core.management.PostTargetManagement; +import dev.sheldan.abstracto.core.management.ServerManagementService; import dev.sheldan.abstracto.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; -import javax.transaction.Transactional; - @Service @Slf4j -public class PostTargetServiceServiceBean implements PostTargetService { +public class PostTargetManagementBean implements PostTargetManagement { @Autowired private PostTargetRepository postTargetRepository; @Autowired - private ChannelService channelService; + private ChannelManagementService channelManagementService; @Autowired - private ServerService serverService; + private ServerManagementService serverManagementService; @Override public void createPostTarget(String name, AChannel targetChannel, AServer server) { @@ -45,14 +46,14 @@ public class PostTargetServiceServiceBean implements PostTargetService { @Override public void createOrUpdate(String name, Long channelId, AServer server) { - AChannel dbChannel = channelService.loadChannel(channelId); + AChannel dbChannel = channelManagementService.loadChannel(channelId); createOrUpdate(name, dbChannel, server); } @Override public void createOrUpdate(String name, Long channelId, Long serverId) { - AChannel dbChannel = channelService.loadChannel(channelId); - AServer dbServer = serverService.loadServer(serverId); + AChannel dbChannel = channelManagementService.loadChannel(channelId); + AServer dbServer = serverManagementService.loadServer(serverId); createOrUpdate(name, dbChannel, dbServer); } @@ -62,6 +63,12 @@ public class PostTargetServiceServiceBean implements PostTargetService { return postTargetRepository.findPostTargetByName(name); } + @Override + public PostTarget getPostTarget(String name, Long serverId) { + AServer server = serverManagementService.loadServer(serverId); + return getPostTarget(name, server); + } + @Override public void updatePostTarget(PostTarget target, AChannel newTargetChannel, AServer server) { postTargetRepository.getOne(target.getId()).setChannelReference(newTargetChannel); diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementServiceBean.java similarity index 67% rename from abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java rename to abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementServiceBean.java index f59aeb265..68e285e8d 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/RoleServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementServiceBean.java @@ -1,12 +1,13 @@ -package dev.sheldan.abstracto.core.service; +package dev.sheldan.abstracto.core.service.management; import dev.sheldan.abstracto.core.models.ARole; +import dev.sheldan.abstracto.core.management.RoleManagementService; import dev.sheldan.abstracto.repository.RoleRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service -public class RoleServiceBean implements RoleService { +public class RoleManagementServiceBean implements RoleManagementService { @Autowired private RoleRepository repository; diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementServiceBean.java new file mode 100644 index 000000000..3ff98b40b --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementServiceBean.java @@ -0,0 +1,64 @@ +package dev.sheldan.abstracto.core.service.management; + +import dev.sheldan.abstracto.core.models.AChannel; +import dev.sheldan.abstracto.core.models.AServer; +import dev.sheldan.abstracto.core.models.PostTarget; +import dev.sheldan.abstracto.core.management.ChannelManagementService; +import dev.sheldan.abstracto.core.management.PostTargetManagement; +import dev.sheldan.abstracto.core.management.ServerManagementService; +import dev.sheldan.abstracto.repository.ServerRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ServerManagementServiceBean implements ServerManagementService { + + @Autowired + private ServerRepository repository; + + @Autowired + private PostTargetManagement postTargetManagement; + + @Autowired + private ChannelManagementService channelManagementService; + + @Override + public AServer createServer(Long id) { + return repository.save(AServer.builder().id(id).build()); + } + + @Override + public AServer loadServer(Long id) { + return repository.getOne(id); + } + + @Override + public void addChannelToServer(AServer server, AChannel channel) { + server.getChannels().add(channel); + } + + @Override + public AChannel getPostTarget(Long serverId, String name) { + AServer server = this.loadServer(serverId); + return getPostTarget(server, name); + } + + @Override + public AChannel getPostTarget(Long serverId, PostTarget target) { + AServer server = this.loadServer(serverId); + return getPostTarget(server, target); + } + + @Override + public AChannel getPostTarget(AServer server, PostTarget target) { + return target.getChannelReference(); + } + + @Override + public AChannel getPostTarget(AServer server, String name) { + PostTarget target = postTargetManagement.getPostTarget(name, server); + return getPostTarget(server, target); + } + + +} diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ChannelServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ChannelServiceBean.java index d3691793b..a886d0113 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ChannelServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ChannelServiceBean.java @@ -1,24 +1,31 @@ package dev.sheldan.abstracto.core.service; import dev.sheldan.abstracto.core.models.AChannel; -import dev.sheldan.abstracto.core.models.AChannelType; -import dev.sheldan.abstracto.repository.ChannelRepository; +import lombok.extern.slf4j.Slf4j; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.TextChannel; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; +import org.springframework.stereotype.Component; -@Service +@Slf4j +@Component public class ChannelServiceBean implements ChannelService { @Autowired - private ChannelRepository repository; + private BotService botService; @Override - public AChannel loadChannel(Long id) { - return repository.getOne(id); - } - - @Override - public AChannel createChannel(Long id, AChannelType type) { - return repository.save(AChannel.builder().id(id).type(type).build()); + public void sendTextInAChannel(String text, AChannel channel) { + Guild guild = botService.getInstance().getGuildById(channel.getServer().getId()); + if (guild != null) { + TextChannel textChannel = guild.getTextChannelById(channel.getId()); + if(textChannel != null) { + textChannel.sendMessage(text).queue(); + } else { + log.warn("Channel {} to post towards was not found in server {}", channel.getId(), channel.getServer().getId()); + } + } else { + log.warn("Guild {} was not found when trying to post a message", channel.getServer().getId()); + } } } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java new file mode 100644 index 000000000..601d006ba --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java @@ -0,0 +1,37 @@ +package dev.sheldan.abstracto.core.service; + +import dev.sheldan.abstracto.core.management.ServerManagementService; +import dev.sheldan.abstracto.core.models.PostTarget; +import lombok.extern.slf4j.Slf4j; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.TextChannel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + + +@Slf4j +@Component +public class PostTargetServiceBean implements PostTargetService { + + @Autowired + private ServerManagementService serverManagementService; + + @Autowired + private BotService botService; + + @Override + public void sendTextInPostTarget(String text, PostTarget target) { + Guild guild = botService.getInstance().getGuildById(target.getServerReference().getId()); + if(guild != null) { + TextChannel textChannelById = guild.getTextChannelById(target.getChannelReference().getId()); + if(textChannelById != null) { + textChannelById.sendMessage(text).queue(); + } else { + log.warn("Incorrect post target configuration: {} points to {} on server {}", target.getName(), + target.getChannelReference().getId(), target.getServerReference().getId()); + } + } else { + log.warn("Incorrect post target configuration: Guild id {} was not found.", target.getServerReference().getId()); + } + } +} diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ServerServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ServerServiceBean.java deleted file mode 100644 index ef500ee21..000000000 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ServerServiceBean.java +++ /dev/null @@ -1,36 +0,0 @@ -package dev.sheldan.abstracto.core.service; - -import dev.sheldan.abstracto.core.models.AChannel; -import dev.sheldan.abstracto.core.models.AServer; -import dev.sheldan.abstracto.repository.ServerRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import javax.transaction.Transactional; - -@Service -public class ServerServiceBean implements ServerService { - - @Autowired - private ServerRepository repository; - - @Override - @Transactional - public AServer createServer(Long id) { - return repository.save(AServer.builder().id(id).build()); - } - - @Override - @Transactional - public AServer loadServer(Long id) { - return repository.getOne(id); - } - - @Override - @Transactional - public void addChannelToServer(AServer server, AChannel channel) { - server.getChannels().add(channel); - } - - -} diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/StartupManager.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/StartupManager.java index 2d99589da..ee5f74b3e 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/StartupManager.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/StartupManager.java @@ -1,6 +1,9 @@ package dev.sheldan.abstracto.core.service; import dev.sheldan.abstracto.SnowflakeUtils; +import dev.sheldan.abstracto.core.management.ChannelManagementService; +import dev.sheldan.abstracto.core.management.RoleManagementService; +import dev.sheldan.abstracto.core.management.ServerManagementService; import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.AChannelType; import dev.sheldan.abstracto.core.models.ARole; @@ -31,13 +34,13 @@ public class StartupManager implements Startup { private List listeners; @Autowired - private ServerService serverService; + private ServerManagementService serverManagementService; @Autowired - private ChannelService channelService; + private ChannelManagementService channelManagementService; @Autowired - private RoleService roleService; + private RoleManagementService roleManagementService; @Override @@ -59,7 +62,7 @@ public class StartupManager implements Startup { List onlineGuilds = instance.getGuilds(); Set availableServers = SnowflakeUtils.getSnowflakeIds(onlineGuilds); availableServers.forEach(aLong -> { - AServer newAServer = serverService.createServer(aLong); + AServer newAServer = serverManagementService.createServer(aLong); Guild newGuild = instance.getGuildById(aLong); log.debug("Synchronizing server: {}", aLong); if(newGuild != null){ @@ -77,7 +80,7 @@ public class StartupManager implements Startup { Set availableRoles = SnowflakeUtils.getSnowflakeIds(existingRoles); Set newRoles = SetUtils.disjunction(availableRoles, knownRolesId); newRoles.forEach(aLong -> { - ARole newRole = roleService.createRole(aLong); + ARole newRole = roleManagementService.createRole(aLong); log.debug("Adding new role: {}", aLong); existingAServer.getRoles().add(newRole); }); @@ -93,8 +96,8 @@ public class StartupManager implements Startup { GuildChannel channel1 = available.stream().filter(channel -> channel.getIdLong() == aLong).findFirst().get(); log.debug("Adding new channel: {}", aLong); AChannelType type = AChannel.getAChannelType(channel1.getType()); - AChannel newChannel = channelService.createChannel(channel1.getIdLong(), type); - serverService.addChannelToServer(existingServer, newChannel); + AChannel newChannel = channelManagementService.createChannel(channel1.getIdLong(), type); + serverManagementService.addChannelToServer(existingServer, newChannel); }); } } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/listener/JoinLeaveListener.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/listener/JoinLeaveListener.java index 62838e424..913ca7c87 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/listener/JoinLeaveListener.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/listener/JoinLeaveListener.java @@ -1,12 +1,11 @@ package dev.sheldan.abstracto.listener; -import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.PostTarget; +import dev.sheldan.abstracto.core.management.PostTargetManagement; import dev.sheldan.abstracto.core.service.PostTargetService; -import dev.sheldan.abstracto.core.service.ServerService; +import dev.sheldan.abstracto.core.management.ServerManagementService; import dev.sheldan.abstracto.templating.TemplateService; import lombok.extern.slf4j.Slf4j; -import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent; import net.dv8tion.jda.api.events.guild.member.GuildMemberLeaveEvent; @@ -23,30 +22,34 @@ import java.util.HashMap; @Slf4j public class JoinLeaveListener extends ListenerAdapter { - public static final String USER_JOIN_TEMPLATE = "user_join"; - public static final String USER_LEAVE_TEMPLATE = "user_leave"; + private static final String USER_JOIN_TEMPLATE = "user_join"; + private static final String USER_LEAVE_TEMPLATE = "user_leave"; @Autowired - private PostTargetService postTargetService; + private PostTargetManagement postTargetManagement; @Autowired - private ServerService serverService; + private ServerManagementService serverManagementService; @Autowired private TemplateService templateService; + @Autowired + private PostTargetService postTargetService; + @Override @Transactional public void onGuildMemberJoin(@Nonnull GuildMemberJoinEvent event) { - AServer server = serverService.loadServer(event.getGuild().getIdLong()); - PostTarget target = postTargetService.getPostTarget(PostTarget.JOIN_LOG, server); - TextChannel textChannelById = event.getGuild().getTextChannelById(target.getChannelReference().getId()); - if(textChannelById != null){ - HashMap parameters = getUserParameter(event.getUser()); - String text = templateService.renderTemplate(USER_JOIN_TEMPLATE, parameters); - textChannelById.sendMessage(text).queue(); - } else { - log.warn("{} post target is not defined for server {}", PostTarget.JOIN_LOG, server.getId()); - } + String text = getRenderedEvent(event.getUser(), USER_JOIN_TEMPLATE); + PostTarget postTarget = postTargetManagement.getPostTarget(PostTarget.JOIN_LOG, event.getGuild().getIdLong()); + postTargetService.sendTextInPostTarget(text, postTarget); + } + + @Override + @Transactional + public void onGuildMemberLeave(@Nonnull GuildMemberLeaveEvent event) { + String text = getRenderedEvent(event.getUser(), USER_LEAVE_TEMPLATE); + PostTarget postTarget = postTargetManagement.getPostTarget(PostTarget.LEAVE_LOG, event.getGuild().getIdLong()); + postTargetService.sendTextInPostTarget(text, postTarget); } @NotNull @@ -57,18 +60,8 @@ public class JoinLeaveListener extends ListenerAdapter { return parameters; } - @Override - @Transactional - public void onGuildMemberLeave(@Nonnull GuildMemberLeaveEvent event) { - AServer server = serverService.loadServer(event.getGuild().getIdLong()); - PostTarget target = postTargetService.getPostTarget(PostTarget.LEAVE_LOG, server); - TextChannel textChannelById = event.getGuild().getTextChannelById(target.getChannelReference().getId()); - if(textChannelById != null){ - HashMap parameters = getUserParameter(event.getUser()); - String text = templateService.renderTemplate(USER_LEAVE_TEMPLATE, parameters); - textChannelById.sendMessage(text).queue(); - } else { - log.warn("{} post target is not defined for server {}", PostTarget.LEAVE_LOG, server.getId()); - } + private String getRenderedEvent(User user, String templateName) { + HashMap parameters = getUserParameter(user); + return templateService.renderTemplate(templateName, parameters); } } diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementService.java new file mode 100644 index 000000000..70f3c030b --- /dev/null +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ChannelManagementService.java @@ -0,0 +1,9 @@ +package dev.sheldan.abstracto.core.management; + +import dev.sheldan.abstracto.core.models.AChannel; +import dev.sheldan.abstracto.core.models.AChannelType; + +public interface ChannelManagementService { + AChannel loadChannel(Long id); + AChannel createChannel(Long id, AChannelType type); +} diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagement.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagement.java new file mode 100644 index 000000000..bd0e8243d --- /dev/null +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/PostTargetManagement.java @@ -0,0 +1,15 @@ +package dev.sheldan.abstracto.core.management; + +import dev.sheldan.abstracto.core.models.AChannel; +import dev.sheldan.abstracto.core.models.AServer; +import dev.sheldan.abstracto.core.models.PostTarget; + +public interface PostTargetManagement { + void createPostTarget(String name, AChannel targetChanel, AServer server); + void createOrUpdate(String name, AChannel targetChannel, AServer server); + void createOrUpdate(String name, Long channelId, AServer server); + void createOrUpdate(String name, Long channelId, Long serverId); + PostTarget getPostTarget(String name, AServer server); + PostTarget getPostTarget(String name, Long serverId); + void updatePostTarget(PostTarget target, AChannel newTargetChannel, AServer server); +} diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementService.java new file mode 100644 index 000000000..3309ebe75 --- /dev/null +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/RoleManagementService.java @@ -0,0 +1,7 @@ +package dev.sheldan.abstracto.core.management; + +import dev.sheldan.abstracto.core.models.ARole; + +public interface RoleManagementService { + ARole createRole(Long id); +} diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementService.java new file mode 100644 index 000000000..be4ef2307 --- /dev/null +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/management/ServerManagementService.java @@ -0,0 +1,15 @@ +package dev.sheldan.abstracto.core.management; + +import dev.sheldan.abstracto.core.models.AChannel; +import dev.sheldan.abstracto.core.models.AServer; +import dev.sheldan.abstracto.core.models.PostTarget; + +public interface ServerManagementService { + AServer createServer(Long id); + AServer loadServer(Long id); + void addChannelToServer(AServer server, AChannel channel); + AChannel getPostTarget(Long serverId, String name); + AChannel getPostTarget(Long serverId, PostTarget target); + AChannel getPostTarget(AServer server, PostTarget target); + AChannel getPostTarget(AServer server, String name); +} diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AChannel.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AChannel.java index 61d9c7531..801e9432b 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AChannel.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AChannel.java @@ -1,9 +1,6 @@ package dev.sheldan.abstracto.core.models; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; import net.dv8tion.jda.api.entities.ChannelType; import javax.persistence.*; @@ -24,6 +21,10 @@ public class AChannel implements SnowFlake { @ManyToMany(mappedBy = "channels") private Set groups; + @ManyToOne(fetch = FetchType.LAZY) + @Getter @Setter + private AServer server; + @Getter @Enumerated(EnumType.STRING) private AChannelType type; diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AServer.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AServer.java index 15eede8fd..003f16bb6 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AServer.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/AServer.java @@ -25,7 +25,11 @@ public class AServer implements SnowFlake { @Builder.Default private List roles = new ArrayList<>(); - @OneToMany(fetch = FetchType.LAZY) + @OneToMany( + fetch = FetchType.LAZY, + mappedBy = "server", + cascade = CascadeType.ALL, + orphanRemoval = true) @Getter @Builder.Default private List channels = new ArrayList<>(); diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ChannelService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ChannelService.java index 5551e61bc..b54ff59e2 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ChannelService.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ChannelService.java @@ -1,9 +1,7 @@ package dev.sheldan.abstracto.core.service; import dev.sheldan.abstracto.core.models.AChannel; -import dev.sheldan.abstracto.core.models.AChannelType; public interface ChannelService { - AChannel loadChannel(Long id); - AChannel createChannel(Long id, AChannelType type); + void sendTextInAChannel(String text, AChannel channel); } diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/PostTargetService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/PostTargetService.java index e9ea1c9a0..833e4cdc0 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/PostTargetService.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/PostTargetService.java @@ -1,14 +1,7 @@ package dev.sheldan.abstracto.core.service; -import dev.sheldan.abstracto.core.models.AChannel; -import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.PostTarget; public interface PostTargetService { - void createPostTarget(String name, AChannel targetChanel, AServer server); - void createOrUpdate(String name, AChannel targetChannel, AServer server); - void createOrUpdate(String name, Long channelId, AServer server); - void createOrUpdate(String name, Long channelId, Long serverId); - PostTarget getPostTarget(String name, AServer server); - void updatePostTarget(PostTarget target, AChannel newTargetChannel, AServer server); + void sendTextInPostTarget(String text, PostTarget target); } diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java deleted file mode 100644 index 587117483..000000000 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/RoleService.java +++ /dev/null @@ -1,7 +0,0 @@ -package dev.sheldan.abstracto.core.service; - -import dev.sheldan.abstracto.core.models.ARole; - -public interface RoleService { - ARole createRole(Long id); -} diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ServerService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ServerService.java deleted file mode 100644 index f5ad6ca63..000000000 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ServerService.java +++ /dev/null @@ -1,10 +0,0 @@ -package dev.sheldan.abstracto.core.service; - -import dev.sheldan.abstracto.core.models.AChannel; -import dev.sheldan.abstracto.core.models.AServer; - -public interface ServerService { - AServer createServer(Long id); - AServer loadServer(Long id); - void addChannelToServer(AServer server, AChannel channel); -} diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/DatabaseTemplateLoader.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/DatabaseTemplateLoader.java index 5149cf91f..e2acdab5a 100644 --- a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/DatabaseTemplateLoader.java +++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/DatabaseTemplateLoader.java @@ -18,12 +18,7 @@ public class DatabaseTemplateLoader implements TemplateLoader { @Override public Object findTemplateSource(String s) throws IOException { - TemplateDto templateDtoByKey = templateService.getTemplateByKey(s); - if(templateDtoByKey != null){ - return templateDtoByKey; - } else { - return null; - } + return templateService.getTemplateByKey(s); } @Override diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java index 5ba5c29e0..cf637ecb3 100644 --- a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java +++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/loading/TemplateServiceBean.java @@ -4,6 +4,7 @@ import dev.sheldan.abstracto.templating.TemplateDto; import dev.sheldan.abstracto.templating.TemplateService; import freemarker.template.Configuration; import freemarker.template.TemplateException; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Component; @@ -13,6 +14,7 @@ import java.io.IOException; import java.time.Instant; import java.util.HashMap; +@Slf4j @Component public class TemplateServiceBean implements TemplateService { @@ -37,10 +39,18 @@ public class TemplateServiceBean implements TemplateService { public String renderTemplate(String key, HashMap parameters) { try { return FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate(key), parameters); - } catch (IOException e) { - e.printStackTrace(); - } catch (TemplateException e) { - e.printStackTrace(); + } catch (IOException | TemplateException e) { + log.warn("Failed to render template: {}", e.getMessage()); + } + return ""; + } + + @Override + public String renderTemplate(String key, Object model) { + try { + return FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate(key), model); + } catch (IOException | TemplateException e) { + log.warn("Failed to render template: {}", e.getMessage()); } return ""; } diff --git a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeddata/TemplateSeedDataLoader.java b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeding/TemplateSeedDataLoader.java similarity index 96% rename from abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeddata/TemplateSeedDataLoader.java rename to abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeding/TemplateSeedDataLoader.java index 857a6ef04..eb62d7eb6 100644 --- a/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeddata/TemplateSeedDataLoader.java +++ b/abstracto-application/templating/templating-impl/src/main/java/dev/sheldan/abstracto/templating/seeding/TemplateSeedDataLoader.java @@ -1,4 +1,4 @@ -package dev.sheldan.abstracto.templating.seeddata; +package dev.sheldan.abstracto.templating.seeding; import dev.sheldan.abstracto.templating.TemplateService; import org.apache.commons.io.FilenameUtils; diff --git a/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/TemplateService.java b/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/TemplateService.java index fada54cab..6725c41e0 100644 --- a/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/TemplateService.java +++ b/abstracto-application/templating/templating-interface/src/main/java/dev/sheldan/abstracto/templating/TemplateService.java @@ -6,5 +6,6 @@ public interface TemplateService { TemplateDto getTemplateByKey(String key); String renderTemplate(TemplateDto templateDto); String renderTemplate(String key, HashMap parameters); + String renderTemplate(String key, Object model); void createTemplate(String key, String content); }