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 extends ListenerAdapter> 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);
}