added rework of model split, not completely done, a lot of questions open (converters evaluate lazy evaluated properties (might need addition of different convert methods), hen egg problem with channel and server for converters, AModels still need to be exposed regardless, because else database cannot be used in same schema (jpa needs the objects), api need to be checked, to not convert all the time between objects for no reason)

This commit is contained in:
Sheldan
2020-04-09 23:59:47 +02:00
parent ef8dcb61d9
commit aa8ff9ddb5
211 changed files with 2067 additions and 1297 deletions

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.abstracto.core</groupId>
<artifactId>core</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>core-db-models</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<exclusions>
<exclusion>
<groupId>club.minnced</groupId>
<artifactId>opus-java</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
@@ -38,13 +38,5 @@ public class AChannel implements SnowFlake {
@Column
private Boolean deleted;
public static AChannelType getAChannelType(ChannelType type) {
switch (type) {
case TEXT: return AChannelType.TEXT;
case PRIVATE: return AChannelType.DM;
case VOICE: return AChannelType.VOICE;
case CATEGORY: return AChannelType.CATEGORY;
default: return AChannelType.UNKOWN;
}
}
}

View File

@@ -1,10 +1,9 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import lombok.*;
import javax.persistence.*;
import java.util.List;
import java.util.Set;
@Entity
@Table(name="channelGroup")

View File

@@ -1,6 +1,5 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import lombok.*;
import javax.persistence.*;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
public enum AChannelType {
TEXT, DM, VOICE, NEWS, CATEGORY, UNKOWN

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.database;
package dev.sheldan.abstracto.core.models;
import lombok.AllArgsConstructor;
import lombok.Builder;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import lombok.*;
@@ -11,7 +11,7 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class AUser {
public class AUser implements SnowFlake {
@Id
private Long id;

View File

@@ -1,10 +1,8 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import lombok.*;
import javax.persistence.*;
import java.util.Arrays;
import java.util.List;
@Entity
@Table(name="posttarget")

View File

@@ -0,0 +1,46 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import net.dv8tion.jda.api.entities.TextChannel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ChannelConverter {
@Autowired
private ServerConverter serverConverter;
public ChannelDto fromChannel(AChannel channel) {
ServerDto server = ServerDto.builder().id(channel.getServer().getId()).build();
return ChannelDto
.builder()
.id(channel.getId())
.deleted(channel.getDeleted())
.server(server)
.build();
}
public ChannelDto fromTextChannel(TextChannel channel) {
return ChannelDto
.builder()
.id(channel.getIdLong())
.deleted(false)
.server(ServerDto.builder().id(channel.getGuild().getIdLong()).build())
.build();
}
public AChannel fromDto(ChannelDto channelDto) {
AServer server = AServer.builder().id(channelDto.getServer().getId()).build();
return AChannel
.builder()
.deleted(channelDto.getDeleted())
.server(server)
.id(channelDto.getId())
.build();
}
}

View File

@@ -0,0 +1,36 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AChannelGroup;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.dto.ChannelGroupDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ChannelGroupConverter {
@Autowired
private ChannelConverter channelConverter;
@Autowired
private ServerConverter serverModelConverter;
public ChannelGroupDto fromChannelGroup(AChannelGroup channelGroup) {
ServerDto server = serverModelConverter.convertServer(channelGroup.getServer());
return ChannelGroupDto
.builder()
.groupName(channelGroup.getGroupName())
.server(server)
.build();
}
public AChannelGroup fromChannelGroup(ChannelGroupDto channelGroup) {
AServer server = serverModelConverter.fromDto(channelGroup.getServer());
return AChannelGroup
.builder()
.groupName(channelGroup.getGroupName())
.server(server)
.build();
}
}

View File

@@ -0,0 +1,26 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.ACommand;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import org.springframework.stereotype.Component;
@Component
public class CommandConverter {
public CommandDto fromCommand(ACommand command) {
return CommandDto
.builder()
.name(command.getName())
.id(command.getId())
.build();
}
public ACommand toCommand(CommandDto command) {
return ACommand
.builder()
.name(command.getName())
.id(command.getId())
.build();
}
}

View File

@@ -0,0 +1,26 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AEmote;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class EmoteConverter {
@Autowired
private ServerConverter serverConverter;
public EmoteDto fromEmote(AEmote emote) {
return EmoteDto
.builder()
.animated(emote.getAnimated())
.custom(emote.getCustom())
.emoteId(emote.getEmoteId())
.emoteKey(emote.getEmoteKey())
.name(emote.getName())
.Id(emote.getId())
.server(serverConverter.convertServer(emote.getServerRef()))
.build();
}
}

View File

@@ -0,0 +1,25 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AModule;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import dev.sheldan.abstracto.core.models.dto.ModuleDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class ModuleConverter {
@Autowired
private CommandConverter commandConverter;
public ModuleDto fromModule(AModule module) {
List<CommandDto> commands = new ArrayList<>();
module.getCommands().forEach(command -> {
commands.add(commandConverter.fromCommand(command));
});
return ModuleDto.builder().name(module.getName()).id(module.getId()).commands(commands).build();
}
}

View File

@@ -0,0 +1,30 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.PostTarget;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.PostTargetDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class PostTargetConverter {
@Autowired
private ChannelConverter channelConverter;
@Autowired
private ServerConverter serverConverter;
public PostTargetDto fromPostTarget(PostTarget postTarget) {
ServerDto convertedServer = serverConverter.convertServer(postTarget.getServerReference());
ChannelDto convertedChannel = channelConverter.fromChannel(postTarget.getChannelReference());
return PostTargetDto
.builder()
.id(postTarget.getId())
.name(postTarget.getName())
.serverReference(convertedServer)
.channelReference(convertedChannel)
.build();
}
}

View File

@@ -0,0 +1,24 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.ARole;
import dev.sheldan.abstracto.core.models.dto.RoleDto;
import org.springframework.stereotype.Component;
@Component
public class RoleConverter {
public RoleDto fromARole(ARole role) {
return RoleDto
.builder()
.id(role.getId())
.name(role.getName())
.build();
}
public ARole fromDto(RoleDto role) {
return ARole
.builder()
.id(role.getId())
.name(role.getName())
.build();
}
}

View File

@@ -0,0 +1,61 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class ServerConverter {
@Autowired
private ChannelConverter channelConverter;
@Autowired
private UserInServerConverter userInServerConverter;
public ServerDto convertServer(AServer server) {
List<ChannelDto> channels = new ArrayList<>();
server.getChannels().forEach(channel -> {
channels.add(channelConverter.fromChannel(channel));
});
List<UserInServerDto> users = new ArrayList<>();
server.getUsers().forEach(aUserInAServer -> {
users.add(userInServerConverter.fromAUserInAServer(aUserInAServer));
});
return ServerDto
.builder()
.id(server.getId())
.channels(channels)
.users(users)
.name(server.getName())
.build();
}
public AServer fromDto(ServerDto serverDto) {
List<AChannel> channels = new ArrayList<>();
serverDto.getChannels().forEach(channelDto -> {
channels.add(channelConverter.fromDto(channelDto));
});
List<AUserInAServer> users = new ArrayList<>();
serverDto.getUsers().forEach(userInServerDto -> {
users.add(userInServerConverter.fromDto(userInServerDto));
});
return AServer
.builder()
.name(serverDto.getName())
.id(serverDto.getId())
.users(users)
.channels(channels)
.build();
}
}

View File

@@ -0,0 +1,22 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AUser;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import net.dv8tion.jda.api.entities.Member;
import org.springframework.stereotype.Component;
@Component
public class UserConverter {
public UserDto fromAUser(AUser user) {
return UserDto.builder().id(user.getId()).build();
}
public UserDto fromMember(Member member) {
return UserDto.builder().id(member.getIdLong()).build();
}
public AUser toUser(UserDto userDto) {
return AUser.builder().id(userDto.getId()).build();
}
}

View File

@@ -0,0 +1,42 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUser;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class UserInServerConverter {
@Autowired
private ServerConverter serverConverter;
@Autowired
private UserConverter userConverter;
public UserInServerDto fromAUserInAServer(AUserInAServer userInAServer) {
ServerDto server = ServerDto.builder().id(userInAServer.getServerReference().getId()).build();
UserDto user = userConverter.fromAUser(userInAServer.getUserReference());
return UserInServerDto
.builder()
.server(server)
.user(user)
.userInServerId(userInAServer.getUserInServerId())
.build();
}
public AUserInAServer fromDto(UserInServerDto userInServerDto) {
AUser user = userConverter.toUser(userInServerDto.getUser());
AServer server = AServer.builder().id(userInServerDto.getServer().getId()).build();
return AUserInAServer
.builder()
.userInServerId(userInServerDto.getUserInServerId())
.serverReference(server)
.userReference(user)
.build();
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class ChannelDto implements SnowFlake {
public Long id;
private Boolean deleted;
private ServerDto server;
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class ChannelGroupCommandDto {
private Long commandInGroupId;
private CommandDto command;
private ChannelGroupDto group;
private Boolean enabled;
}

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@Builder
public class ChannelGroupDto {
private Long id;
private String groupName;
private ServerDto server;
private List<ChannelDto> channels;
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.AModule;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class CommandDto {
private Long id;
private String name;
private AModule module;
}

View File

@@ -0,0 +1,18 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class EmoteDto {
private Integer Id;
private String name;
private String emoteKey;
private Long emoteId;
private Boolean animated;
private Boolean custom;
private ServerDto server;
}

View File

@@ -0,0 +1,19 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
@Builder
public class ModuleDto {
private Long id;
private String name;
private List<CommandDto> commands = new ArrayList<>();
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class PostTargetDto {
private Long id;
private String name;
private ChannelDto channelReference;
private ServerDto serverReference;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class RoleDto implements SnowFlake {
private Long id;
private String name;
}

View File

@@ -0,0 +1,20 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@Builder
public class ServerDto implements SnowFlake {
private Long id;
private String name;
private List<ChannelDto> channels;
private List<UserInServerDto> users;
private List<RoleDto> roles;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class UserDto implements SnowFlake {
private Long id;
}

View File

@@ -0,0 +1,17 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class UserInServerDto {
private Long userInServerId;
private UserDto user;
private ServerDto server;
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.core.models.utils;
import dev.sheldan.abstracto.core.models.AChannelType;
import net.dv8tion.jda.api.entities.ChannelType;
public class ChannelUtils {
public static AChannelType getAChannelType(ChannelType type) {
switch (type) {
case TEXT: return AChannelType.TEXT;
case PRIVATE: return AChannelType.DM;
case VOICE: return AChannelType.VOICE;
case CATEGORY: return AChannelType.CATEGORY;
default: return AChannelType.UNKOWN;
}
}
}

View File

@@ -82,6 +82,13 @@
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>dev.sheldan.abstracto.core</groupId>
<artifactId>core-db-models</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>

View File

@@ -13,15 +13,19 @@ import dev.sheldan.abstracto.core.command.service.PostCommandExecution;
import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter;
import dev.sheldan.abstracto.core.Constants;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementServiceBean;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.models.converter.ServerConverter;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.*;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.management.ChannelManagementServiceBean;
import dev.sheldan.abstracto.core.service.management.ServerManagementServiceBean;
import dev.sheldan.abstracto.core.service.management.UserManagementServiceBean;
import dev.sheldan.abstracto.core.utils.ParseUtils;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Emote;
@@ -31,6 +35,7 @@ import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.rsocket.RSocketProperties;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@@ -52,13 +57,13 @@ public class CommandReceivedHandler extends ListenerAdapter {
private List<PostCommandExecution> executions;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Autowired
private UserManagementService userManagementService;
private UserManagementServiceBean userManagementService;
@Autowired
private ChannelManagementService channelManagementService;
private ChannelManagementServiceBean channelManagementService;
@Autowired
@Lazy
@@ -68,7 +73,16 @@ public class CommandReceivedHandler extends ListenerAdapter {
private ChannelGroupCommandService channelGroupCommandService;
@Autowired
private CommandManagementService commandManagementService;
private CommandManagementServiceBean commandManagementService;
@Autowired
private ChannelConverter channelConverter;
@Autowired
private ServerConverter serverConverter;
@Autowired
private UserInServerConverter userConverter;
@Override
@Async
@@ -134,16 +148,16 @@ public class CommandReceivedHandler extends ListenerAdapter {
}
private UserInitiatedServerContext buildTemplateParameter(MessageReceivedEvent event) {
AChannel channel = channelManagementService.loadChannel(event.getChannel().getIdLong());
AServer server = serverManagementService.loadOrCreate(event.getGuild().getIdLong());
AUserInAServer user = userManagementService.loadUser(event.getMember());
ChannelDto aChannel = channelManagementService.loadChannel(event.getChannel().getIdLong());
ServerDto server = serverManagementService.loadOrCreate(event.getGuild().getIdLong());
UserInServerDto user = userManagementService.loadUser(event.getMember());
return UserInitiatedServerContext
.builder()
.channel(channel)
.channel(aChannel)
.server(server)
.member(event.getMember())
.aUserInAServer(user)
.user(user.getUserReference())
.user(user.getUser())
.messageChannel(event.getTextChannel())
.guild(event.getGuild())
.build();

View File

@@ -3,7 +3,7 @@ package dev.sheldan.abstracto.core.command.config;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.listener.ServerConfigListener;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -19,7 +19,7 @@ public class CommandConfigListener implements ServerConfigListener {
private CommandService commandService;
@Override
public void updateServerConfig(AServer server) {
public void updateServerConfig(ServerDto server) {
commandList.forEach(command -> {
if(!commandService.doesCommandExist(command.getConfiguration().getName())) {
commandService.createCommand(command.getConfiguration().getName(), command.getConfiguration().getModule());

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.command.repository;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
import dev.sheldan.abstracto.core.models.database.AChannelGroupCommand;
import dev.sheldan.abstracto.core.models.AChannelGroup;
import dev.sheldan.abstracto.core.models.AChannelGroupCommand;
import dev.sheldan.abstracto.core.models.ACommand;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.repository;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.models.ACommand;
import org.springframework.data.jpa.repository.JpaRepository;
public interface CommandRepository extends JpaRepository<ACommand, Long> {

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.command.repository;
import dev.sheldan.abstracto.core.command.models.database.AModule;
import dev.sheldan.abstracto.core.models.AModule;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ModuleRepository extends JpaRepository<AModule, Long> {

View File

@@ -1,9 +1,10 @@
package dev.sheldan.abstracto.core.command.service;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.service.management.ChannelGroupCommandManagementService;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelGroupCommand;
import dev.sheldan.abstracto.core.models.*;
import dev.sheldan.abstracto.core.command.service.management.ChannelGroupCommandManagementServiceBean;
import dev.sheldan.abstracto.core.models.converter.CommandConverter;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -14,10 +15,13 @@ import java.util.Optional;
public class ChannelGroupCommandServiceBean implements ChannelGroupCommandService {
@Autowired
private ChannelGroupCommandManagementService channelGroupCommandService;
private ChannelGroupCommandManagementServiceBean channelGroupCommandService;
@Autowired
private CommandConverter commandConverter;
@Override
public Boolean isCommandEnabled(ACommand command, AChannel channel) {
public Boolean isCommandEnabled(CommandDto command, ChannelDto channel) {
List<AChannelGroupCommand> allChannelGroupsOfCommand = channelGroupCommandService.getAllGroupCommandsForCommand(command);
for (AChannelGroupCommand aChannelGroupCommand : allChannelGroupsOfCommand) {
Optional<AChannel> channelInGroup = aChannelGroupCommand.getGroup()
@@ -28,9 +32,6 @@ public class ChannelGroupCommandServiceBean implements ChannelGroupCommandServic
}
}
}
if(allChannelGroupsOfCommand.size() == 0) {
return true;
}
return false;
return allChannelGroupsOfCommand.size() == 0;
}
}

View File

@@ -1,9 +1,11 @@
package dev.sheldan.abstracto.core.command.service;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.models.database.AModule;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.command.service.management.ModuleManagementService;
import dev.sheldan.abstracto.core.models.ACommand;
import dev.sheldan.abstracto.core.models.AModule;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementServiceBean;
import dev.sheldan.abstracto.core.command.service.management.ModuleManagementServiceBean;
import dev.sheldan.abstracto.core.models.converter.CommandConverter;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -11,20 +13,27 @@ import org.springframework.stereotype.Component;
public class CommandServiceBean implements CommandService {
@Autowired
private ModuleManagementService moduleManagementService;
private ModuleManagementServiceBean moduleManagementService;
@Autowired
private CommandManagementService commandManagementService;
private CommandManagementServiceBean commandManagementServiceBean;
@Autowired
private CommandConverter commandConverter;
@Override
public ACommand createCommand(String name, String moduleName) {
AModule module = moduleManagementService.getOrCreate(moduleName);
return commandManagementService.createCommand(name, module);
public CommandDto createCommand(String name, String moduleName) {
return commandManagementServiceBean.createCommand(name, moduleName);
}
@Override
public Boolean doesCommandExist(String name) {
return commandManagementService.doesCommandExist(name);
return commandManagementServiceBean.doesCommandExist(name);
}
@Override
public CommandDto findCommandByName(String name) {
return commandManagementServiceBean.findCommandByName(name);
}

View File

@@ -1,23 +1,27 @@
package dev.sheldan.abstracto.core.command.service.management;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.models.AChannelGroup;
import dev.sheldan.abstracto.core.models.AChannelGroupCommand;
import dev.sheldan.abstracto.core.models.ACommand;
import dev.sheldan.abstracto.core.command.repository.ChannelGroupCommandRepository;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
import dev.sheldan.abstracto.core.models.database.AChannelGroupCommand;
import dev.sheldan.abstracto.core.models.dto.ChannelGroupDto;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class ChannelGroupCommandManagementServiceBean implements ChannelGroupCommandManagementService {
public class ChannelGroupCommandManagementServiceBean {
@Autowired
private ChannelGroupCommandRepository groupCommandRepository;
@Override
public void setCommandInGroupTo(ACommand command, AChannelGroup group, Boolean enabled) {
AChannelGroupCommand groupCommand = groupCommandRepository.findByCommandAndGroup(command, group);
public void setCommandInGroupTo(CommandDto command, ChannelGroupDto group, Boolean enabled) {
AChannelGroup aChannelGroup = AChannelGroup.builder().id(group.getId()).build();
ACommand aCommand = ACommand.builder().id(command.getId()).build();
AChannelGroupCommand groupCommand = groupCommandRepository.findByCommandAndGroup(aCommand, aChannelGroup);
if(groupCommand == null) {
groupCommand = createCommandInGroupTo(command, group);
}
@@ -25,12 +29,11 @@ public class ChannelGroupCommandManagementServiceBean implements ChannelGroupCom
groupCommandRepository.save(groupCommand);
}
@Override
public AChannelGroupCommand createCommandInGroupTo(ACommand command, AChannelGroup group) {
public AChannelGroupCommand createCommandInGroupTo(CommandDto command, ChannelGroupDto group) {
AChannelGroupCommand channelGroupCommand = AChannelGroupCommand
.builder()
.command(command)
.group(group)
.command(ACommand.builder().id(command.getId()).build())
.group(AChannelGroup.builder().id(group.getId()).build())
.enabled(false)
.build();
@@ -38,14 +41,14 @@ public class ChannelGroupCommandManagementServiceBean implements ChannelGroupCom
return channelGroupCommand;
}
@Override
public AChannelGroupCommand getChannelGroupCommand(ACommand command, AChannelGroup group) {
return groupCommandRepository.findByCommandAndGroup(command, group);
public AChannelGroupCommand getChannelGroupCommand(CommandDto command, ChannelGroupDto group) {
ACommand aCommand = ACommand.builder().id(command.getId()).build();
AChannelGroup aChannelGroup = AChannelGroup.builder().id(group.getId()).build();
return groupCommandRepository.findByCommandAndGroup(aCommand, aChannelGroup);
}
@Override
public List<AChannelGroupCommand> getAllGroupCommandsForCommand(ACommand command) {
return groupCommandRepository.findByCommand(command);
public List<AChannelGroupCommand> getAllGroupCommandsForCommand(CommandDto command) {
return groupCommandRepository.findByCommand(ACommand.builder().id(command.getId()).build());
}

View File

@@ -1,47 +1,54 @@
package dev.sheldan.abstracto.core.command.service.management;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.models.database.AModule;
import dev.sheldan.abstracto.core.models.ACommand;
import dev.sheldan.abstracto.core.models.AModule;
import dev.sheldan.abstracto.core.command.repository.CommandRepository;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.converter.CommandConverter;
import dev.sheldan.abstracto.core.models.converter.ModuleConverter;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import dev.sheldan.abstracto.core.models.dto.ModuleDto;
import dev.sheldan.abstracto.core.service.management.ServerManagementServiceBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class CommandManagementServiceBean implements CommandManagementService {
public class CommandManagementServiceBean {
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Autowired
private ModuleManagementService moduleManagementService;
private ModuleManagementServiceBean moduleManagementService;
@Autowired
private CommandRepository commandRepository;
@Override
public ACommand createCommand(String name, String moduleName) {
@Autowired
private CommandConverter commandConverter;
@Autowired
private ModuleConverter moduleConverter;
public CommandDto createCommand(String name, String moduleName) {
AModule module = moduleManagementService.findModuleByName(moduleName);
return createCommand(name, module);
return createCommand(name, moduleConverter.fromModule(module));
}
@Override
public ACommand createCommand(String name, AModule module) {
public CommandDto createCommand(String name, ModuleDto module) {
ACommand command = ACommand
.builder()
.name(name)
.module(module)
.module(AModule.builder().id(module.getId()).build())
.build();
commandRepository.save(command);
return command;
return commandConverter.fromCommand(command);
}
@Override
public ACommand findCommandByName(String name) {
return commandRepository.findByName(name);
public CommandDto findCommandByName(String name) {
ACommand byName = commandRepository.findByName(name);
return commandConverter.fromCommand(byName);
}
@Override
public Boolean doesCommandExist(String name) {
return findCommandByName(name) != null;
}

View File

@@ -1,17 +1,16 @@
package dev.sheldan.abstracto.core.command.service.management;
import dev.sheldan.abstracto.core.command.models.database.AModule;
import dev.sheldan.abstracto.core.models.AModule;
import dev.sheldan.abstracto.core.command.repository.ModuleRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ModuleManagementServiceBean implements ModuleManagementService {
public class ModuleManagementServiceBean {
@Autowired
private ModuleRepository moduleRepository;
@Override
public AModule createModule(String name) {
AModule module = AModule.
builder()
@@ -21,7 +20,6 @@ public class ModuleManagementServiceBean implements ModuleManagementService {
return module;
}
@Override
public AModule getOrCreate(String name) {
AModule module = findModuleByName(name);
if(module == null) {
@@ -30,12 +28,10 @@ public class ModuleManagementServiceBean implements ModuleManagementService {
return module;
}
@Override
public AModule findModuleByName(String name) {
return moduleRepository.findByName(name);
}
@Override
public Boolean doesModuleExist(String name) {
return findModuleByName(name) != null;
}

View File

@@ -7,7 +7,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
import dev.sheldan.abstracto.core.commands.utility.UtilityModuleInterface;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementServiceBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -19,7 +19,7 @@ public class Disable implements Command {
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
private FeatureFlagManagementServiceBean featureFlagManagementService;
@Override
public CommandResult execute(CommandContext commandContext) {
String flagKey = (String) commandContext.getParameters().getParameters().get(0);

View File

@@ -7,7 +7,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
import dev.sheldan.abstracto.core.commands.utility.UtilityModuleInterface;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementServiceBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -19,7 +19,7 @@ public class Enable implements Command {
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
private FeatureFlagManagementServiceBean featureFlagManagementService;
@Override
public CommandResult execute(CommandContext commandContext) {
String flagKey = (String) commandContext.getParameters().getParameters().get(0);

View File

@@ -6,13 +6,13 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.execution.ContextConverter;
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.models.dto.ChannelGroupDto;
import dev.sheldan.abstracto.core.models.template.commands.ChannelGroupChannelModel;
import dev.sheldan.abstracto.core.models.template.commands.ChannelGroupModel;
import dev.sheldan.abstracto.core.models.template.commands.ListChannelGroupsModel;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
import dev.sheldan.abstracto.core.service.ChannelGroupService;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.management.ChannelGroupManagementService;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.templating.service.TemplateService;
import net.dv8tion.jda.api.entities.TextChannel;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,14 +30,14 @@ public class ListChannelGroups implements Command {
private TemplateService templateService;
@Autowired
private ChannelGroupManagementService channelGroupManagementService;
private ChannelGroupService channelGroupManagementService;
@Autowired
private ChannelService channelService;
@Override
public CommandResult execute(CommandContext commandContext) {
List<AChannelGroup> channelGroups = channelGroupManagementService.findAllInServer(commandContext.getUserInitiatedContext().getServer());
List<ChannelGroupDto> channelGroups = channelGroupManagementService.findAllInServer(commandContext.getUserInitiatedContext().getServer());
ListChannelGroupsModel template = (ListChannelGroupsModel) ContextConverter.fromCommandContext(commandContext, ListChannelGroupsModel.class);
template.setGroups(convertAChannelGroupToChannelGroupChannel(channelGroups));
MessageToSend response = templateService.renderEmbedTemplate("listChannelGroups_response", template);
@@ -45,7 +45,7 @@ public class ListChannelGroups implements Command {
return CommandResult.fromSuccess();
}
private List<ChannelGroupModel> convertAChannelGroupToChannelGroupChannel(List<AChannelGroup> channelGroups) {
private List<ChannelGroupModel> convertAChannelGroupToChannelGroupChannel(List<ChannelGroupDto> channelGroups) {
List<ChannelGroupModel> converted = new ArrayList<>();
channelGroups.forEach(group -> {
List<ChannelGroupChannelModel> convertedChannels = new ArrayList<>();

View File

@@ -7,8 +7,8 @@ import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
import dev.sheldan.abstracto.core.models.template.commands.PostTargetErrorModel;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.PostTargetManagement;
import dev.sheldan.abstracto.core.service.management.ChannelManagementServiceBean;
import dev.sheldan.abstracto.core.service.management.PostTargetManagementBean;
import dev.sheldan.abstracto.templating.service.TemplateService;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild;
@@ -27,13 +27,13 @@ public class PostTarget implements Command {
public static final String POST_TARGET_NO_TARGET_TEMPLATE = "posttarget_no_target";
public static final String POST_TARGET_INVALID_TARGET_TEMPLATE = "posttarget_invalid_target";
@Autowired
private PostTargetManagement postTargetManagement;
private PostTargetManagementBean postTargetManagement;
@Autowired
private PostTargetService postTargetService;
@Autowired
private ChannelManagementService channelManagementService;
private ChannelManagementServiceBean channelManagementService;
@Autowired
private TemplateService templateService;

View File

@@ -7,7 +7,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.config.AbstractoFeatures;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.service.management.EmoteManagementServiceBean;
import net.dv8tion.jda.api.entities.Emote;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -19,7 +19,7 @@ import java.util.List;
public class SetEmote implements Command {
@Autowired
private EmoteManagementService emoteManagementService;
private EmoteManagementServiceBean emoteManagementService;
@Autowired
private EmoteService emoteService;

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.config;
import dev.sheldan.abstracto.core.listener.ServerConfigListener;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -15,10 +15,10 @@ public class FeatureFlagListener implements ServerConfigListener {
private FeatureFlagConfig featureFlagConfig;
@Autowired
private FeatureFlagManagementService service;
private FeatureFlagManagementServiceBean service;
@Override
public void updateServerConfig(AServer server) {
public void updateServerConfig(ServerDto server) {
log.info("Setting up feature flags if necessary.");
featureFlagConfig.getFeatures().forEach((featureFlagKey, featureFlagValue) -> {
if(!service.getFeatureFlag(featureFlagKey, server.getId()).isPresent()) {

View File

@@ -1,11 +1,14 @@
package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.database.AChannelType;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AChannelType;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.utils.ChannelUtils;
import dev.sheldan.abstracto.core.repository.ServerRepository;
import dev.sheldan.abstracto.core.service.management.ChannelManagementServiceBean;
import dev.sheldan.abstracto.core.service.management.ServerManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.channel.text.TextChannelCreateEvent;
@@ -22,13 +25,10 @@ import javax.annotation.Nonnull;
public class ChannelListener extends ListenerAdapter {
@Autowired
private ServerRepository serverRepository;
private ChannelManagementServiceBean channelManagementService;
@Autowired
private ChannelManagementService channelManagementService;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Override
@Transactional
@@ -41,10 +41,10 @@ public class ChannelListener extends ListenerAdapter {
@Transactional
public void onTextChannelCreate(@Nonnull TextChannelCreateEvent event) {
log.info("Handling channel created event. Channel {}, Server {}", event.getChannel().getIdLong(), event.getGuild().getIdLong());
AServer serverObject = serverRepository.getOne(event.getGuild().getIdLong());
TextChannel createdChannel = event.getChannel();
AChannelType type = AChannel.getAChannelType(createdChannel.getType());
AChannel newChannel = channelManagementService.createChannel(createdChannel.getIdLong(), type);
serverManagementService.addChannelToServer(serverObject, newChannel);
AChannelType type = ChannelUtils.getAChannelType(createdChannel.getType());
ChannelDto newChannel = channelManagementService.createChannel(createdChannel.getIdLong(), type);
ServerDto serverDto = ServerDto.builder().id(event.getGuild().getIdLong()).build();
serverManagementService.addChannelToServer(serverDto, newChannel);
}
}

View File

@@ -22,6 +22,7 @@ public class JoinListenerBean extends ListenerAdapter {
@Autowired
private FeatureFlagService featureFlagService;
@Override
@Transactional
public void onGuildMemberJoin(@Nonnull GuildMemberJoinEvent event) {

View File

@@ -1,15 +1,17 @@
package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.MessageCache;
import dev.sheldan.abstracto.core.service.management.UserManagementServiceBean;
import dev.sheldan.abstracto.core.utils.EmoteUtils;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionAddEvent;
@@ -36,7 +38,7 @@ public class ReactionUpdatedListener extends ListenerAdapter {
private EmoteService emoteService;
@Autowired
private UserManagementService userManagementService;
private UserManagementServiceBean userManagementService;
@Autowired
private List<ReactedAddedListener> addedListenerList;
@@ -53,6 +55,9 @@ public class ReactionUpdatedListener extends ListenerAdapter {
@Autowired
private Bot bot;
@Autowired
private UserInServerConverter userInServerConverter;
@Override
@Transactional
public void onGuildMessageReactionAdd(@Nonnull GuildMessageReactionAddEvent event) {
@@ -70,7 +75,7 @@ public class ReactionUpdatedListener extends ListenerAdapter {
});
}
private void addReactionIfNotThere(CachedMessage message, CachedReaction reaction, AUser userReacting) {
private void addReactionIfNotThere(CachedMessage message, CachedReaction reaction, UserDto userReacting) {
Optional<CachedReaction> existingReaction = message.getReactions().stream().filter(reaction1 -> {
return EmoteUtils.compareAEmote(reaction1.getEmote(), reaction.getEmote());
}).findAny();
@@ -78,14 +83,14 @@ public class ReactionUpdatedListener extends ListenerAdapter {
message.getReactions().add(reaction);
} else {
CachedReaction cachedReaction = existingReaction.get();
Optional<AUser> any = cachedReaction.getUsers().stream().filter(user -> user.getId().equals(userReacting.getId())).findAny();
Optional<UserDto> any = cachedReaction.getUsers().stream().filter(user -> user.getId().equals(userReacting.getId())).findAny();
if(!any.isPresent()){
cachedReaction.getUsers().add(userReacting);
}
}
}
private void removeReactionIfThere(CachedMessage message, CachedReaction reaction, AUser userReacting) {
private void removeReactionIfThere(CachedMessage message, CachedReaction reaction, UserDto userReacting) {
Optional<CachedReaction> existingReaction = message.getReactions().stream().filter(reaction1 -> {
return EmoteUtils.compareAEmote(reaction1.getEmote(), reaction.getEmote());
}).findAny();
@@ -98,8 +103,8 @@ public class ReactionUpdatedListener extends ListenerAdapter {
@Transactional
public void callAddedListeners(@Nonnull GuildMessageReactionAddEvent event, CachedMessage cachedMessage, CachedReaction reaction) {
AUserInAServer userInAServer = userManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
addReactionIfNotThere(cachedMessage, reaction, userInAServer.getUserReference());
UserInServerDto userInAServer = userManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
addReactionIfNotThere(cachedMessage, reaction, userInAServer.getUser());
addedListenerList.forEach(reactedAddedListener -> {
if(!featureFlagService.isFeatureEnabled(reactedAddedListener.getFeature(), event.getGuild().getIdLong())) {
return;
@@ -132,8 +137,8 @@ public class ReactionUpdatedListener extends ListenerAdapter {
@Transactional
public void callRemoveListeners(@Nonnull GuildMessageReactionRemoveEvent event, CachedMessage cachedMessage, CachedReaction reaction) {
AUserInAServer userInAServer = userManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
removeReactionIfThere(cachedMessage, reaction, userInAServer.getUserReference());
UserInServerDto userInAServer = userManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
removeReactionIfThere(cachedMessage, reaction, userInAServer.getUser());
reactionRemovedListener.forEach(reactedAddedListener -> {
if(!featureFlagService.isFeatureEnabled(reactedAddedListener.getFeature(), event.getGuild().getIdLong())) {
return;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AChannelGroup;
import dev.sheldan.abstracto.core.models.AServer;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.AChannel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.AConfig;
import dev.sheldan.abstracto.core.models.AConfig;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ConfigRepository extends JpaRepository<AConfig, Long> {

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AEmote;
import dev.sheldan.abstracto.core.models.AServer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AFeatureFlag;
import dev.sheldan.abstracto.core.models.AServer;
import org.springframework.data.jpa.repository.JpaRepository;
public interface FeatureFlagRepository extends JpaRepository<AFeatureFlag, Long> {

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.PostTarget;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.ARole;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AServer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUser;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.repository;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.AUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

View File

@@ -2,8 +2,8 @@ package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.exception.ChannelException;
import dev.sheldan.abstracto.core.exception.GuildException;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import dev.sheldan.abstracto.core.models.GuildChannelMember;
import dev.sheldan.abstracto.core.models.database.AEmote;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
@@ -82,7 +82,7 @@ public class BotServiceBean implements Bot {
}
@Override
public Optional<Emote> getEmote(Long serverId, AEmote emote) {
public Optional<Emote> getEmote(Long serverId, EmoteDto emote) {
if(!emote.getCustom()) {
return Optional.empty();
}

View File

@@ -1,47 +1,67 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.exception.ChannelGroupException;
import dev.sheldan.abstracto.core.command.exception.CommandException;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.service.management.ChannelGroupCommandManagementService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ChannelGroupManagementService;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.*;
import dev.sheldan.abstracto.core.command.service.management.ChannelGroupCommandManagementServiceBean;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementServiceBean;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.models.converter.ChannelGroupConverter;
import dev.sheldan.abstracto.core.models.converter.ServerConverter;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ChannelGroupDto;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.service.management.ChannelGroupManagementServiceBean;
import dev.sheldan.abstracto.core.service.management.ChannelManagementServiceBean;
import dev.sheldan.abstracto.core.service.management.ServerManagementServiceBean;
import net.dv8tion.jda.api.entities.TextChannel;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class ChannelGroupServiceBean implements ChannelGroupService {
@Autowired
private ChannelGroupManagementService channelGroupManagementService;
private ChannelGroupManagementServiceBean channelGroupManagementService;
@Autowired
private ChannelManagementService channelManagementService;
private ChannelManagementServiceBean channelManagementService;
@Autowired
private CommandManagementService commandManagementService;
private CommandManagementServiceBean commandManagementService;
@Autowired
private ChannelGroupCommandManagementService channelGroupCommandManagementService;
private ChannelGroupCommandManagementServiceBean channelGroupCommandManagementService;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Autowired
private ChannelGroupConverter channelGroupConverter;
@Autowired
private ChannelConverter channelConverter;
@Autowired
private ServerConverter serverConverter;
@Override
public AChannelGroup createChannelGroup(String name, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
return channelGroupManagementService.createChannelGroup(name, server);
public ChannelGroupDto createChannelGroup(String name, Long serverId) {
ServerDto server = serverManagementService.loadOrCreate(serverId);
AChannelGroup channelGroup = channelGroupManagementService.createChannelGroup(name, server);
return channelGroupConverter.fromChannelGroup(channelGroup);
}
@Override
public void deleteChannelGroup(String name, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
ServerDto server = serverManagementService.loadOrCreate(serverId);
channelGroupManagementService.deleteChannelGroup(name, server);
}
@@ -52,14 +72,14 @@ public class ChannelGroupServiceBean implements ChannelGroupService {
@Override
public void addChannelToChannelGroup(String channelGroupName, Long channelId) {
AChannel aChannel = channelManagementService.loadChannel(channelId);
ChannelDto aChannel = ChannelDto.builder().id(channelId).build();
addChannelToChannelGroup(channelGroupName, aChannel);
}
@Override
public void addChannelToChannelGroup(String channelGroupName, AChannel channel) {
AServer server = serverManagementService.loadOrCreate(channel.getServer().getId());
AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server);
public void addChannelToChannelGroup(String channelGroupName, ChannelDto channel) {
ServerDto server = serverManagementService.loadOrCreate(channel.getServer().getId());
ChannelGroupDto channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server);
if(channelGroup == null) {
throw new ChannelGroupException(String.format("Channel group %s was not found.", channelGroupName));
}
@@ -73,14 +93,14 @@ public class ChannelGroupServiceBean implements ChannelGroupService {
@Override
public void removeChannelFromChannelGroup(String channelGroupName, Long channelId) {
AChannel aChannel = channelManagementService.loadChannel(channelId);
removeChannelFromChannelGroup(channelGroupName, aChannel);
ChannelDto channel = ChannelDto.builder().id(channelId).build();
removeChannelFromChannelGroup(channelGroupName, channel);
}
@Override
public void removeChannelFromChannelGroup(String channelGroupName, AChannel channel) {
AServer server = serverManagementService.loadOrCreate(channel.getServer().getId());
AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server);
public void removeChannelFromChannelGroup(String channelGroupName, ChannelDto channel) {
ServerDto serverDto = ServerDto.builder().id(channel.getServer().getId()).build();
ChannelGroupDto channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, serverDto);
if(channelGroup == null) {
throw new ChannelGroupException(String.format("Channel group %s was not found", channelGroupName));
}
@@ -89,12 +109,12 @@ public class ChannelGroupServiceBean implements ChannelGroupService {
@Override
public void disableCommandInChannelGroup(String commandName, String channelGroupName, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server);
ServerDto serverDto = ServerDto.builder().id(serverId).build();
ChannelGroupDto channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, serverDto);
if(channelGroup == null) {
throw new ChannelGroupException(String.format("Channel group %s was not found", channelGroupName));
}
ACommand command = commandManagementService.findCommandByName(commandName);
CommandDto command = commandManagementService.findCommandByName(commandName);
if(command == null) {
throw new CommandException(String.format("Command %s not found.", commandName));
}
@@ -103,12 +123,12 @@ public class ChannelGroupServiceBean implements ChannelGroupService {
@Override
public void enableCommandInChannelGroup(String commandName, String channelGroupName, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server);
ServerDto serverDto = ServerDto.builder().id(serverId).build();
ChannelGroupDto channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, serverDto);
if(channelGroup == null) {
throw new ChannelGroupException(String.format("Channel group %s was not found", channelGroupName));
}
ACommand command = commandManagementService.findCommandByName(commandName);
CommandDto command = commandManagementService.findCommandByName(commandName);
if(command == null) {
throw new CommandException(String.format("Command %s not found.", commandName));
}
@@ -117,7 +137,17 @@ public class ChannelGroupServiceBean implements ChannelGroupService {
@Override
public boolean doesGroupExist(String groupName, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
ServerDto server = serverManagementService.loadOrCreate(serverId);
return channelGroupManagementService.findByNameAndServer(groupName, server) != null;
}
@Override
public List<ChannelGroupDto> findAllInServer(ServerDto server) {
List<ChannelGroupDto> channelGroupDtos = new ArrayList<>();
List<AChannelGroup> allInServer = channelGroupManagementService.findAllInServer(server.getId());
allInServer.forEach(channelGroup -> {
channelGroupDtos.add(channelGroupConverter.fromChannelGroup(channelGroup));
});
return channelGroupDtos;
}
}

View File

@@ -1,9 +1,12 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.exception.ChannelException;
import dev.sheldan.abstracto.core.exception.GuildException;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.service.management.ChannelManagementServiceBean;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.models.database.AChannel;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
@@ -25,8 +28,14 @@ public class ChannelServiceBean implements ChannelService {
@Autowired
private Bot botService;
@Autowired
private ChannelManagementServiceBean channelManagementServiceBean;
@Autowired
private ChannelConverter channelConverter;
@Override
public void sendTextInAChannel(String text, AChannel channel) {
public void sendTextInAChannel(String text, ChannelDto channel) {
Guild guild = botService.getInstance().getGuildById(channel.getServer().getId());
if (guild != null) {
TextChannel textChannel = guild.getTextChannelById(channel.getId());
@@ -43,7 +52,7 @@ public class ChannelServiceBean implements ChannelService {
}
@Override
public List<CompletableFuture<Message>> sendMessageToEndInAChannel(MessageToSend messageToSend, AChannel channel) {
public List<CompletableFuture<Message>> sendMessageToEndInAChannel(MessageToSend messageToSend, ChannelDto channel) {
Optional<TextChannel> textChannelFromServer = botService.getTextChannelFromServer(channel.getServer().getId(), channel.getId());
if(textChannelFromServer.isPresent()) {
return sendMessageToEndInTextChannel(messageToSend, textChannelFromServer.get());
@@ -80,4 +89,9 @@ public class ChannelServiceBean implements ChannelService {
public Optional<TextChannel> getTextChannelInGuild(Long serverId, Long channelId) {
return botService.getTextChannelFromServer(serverId, channelId);
}
@Override
public ChannelDto loadChannel(Long channelId) {
return channelManagementServiceBean.loadChannel(channelId);
}
}

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.core.models.database.AConfig;
import dev.sheldan.abstracto.core.models.AConfig;
import dev.sheldan.abstracto.core.service.management.ConfigManagementServiceBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -9,7 +9,7 @@ import org.springframework.stereotype.Component;
public class ConfigServiceBean implements ConfigService{
@Autowired
private ConfigManagementService configManagementService;
private ConfigManagementServiceBean configManagementService;
@Override
public Double getDoubleValue(String name, Long serverId) {
@@ -24,4 +24,9 @@ public class ConfigServiceBean implements ConfigService{
}
return config.getDoubleValue();
}
@Override
public void createValueIfNotExists(String name, Long serverId, Double value) {
configManagementService.createIfNotExists(serverId, name, value);
}
}

View File

@@ -1,8 +1,10 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.exception.EmoteException;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.models.AEmote;
import dev.sheldan.abstracto.core.models.converter.EmoteConverter;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import dev.sheldan.abstracto.core.service.management.EmoteManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.Guild;
@@ -20,7 +22,10 @@ public class EmoteServiceBean implements EmoteService {
private Bot botService;
@Autowired
private EmoteManagementService emoteManagementService;
private EmoteManagementServiceBean emoteManagementService;
@Autowired
private EmoteConverter emoteConverter;
@Override
public boolean isEmoteUsableByBot(Emote emote) {
@@ -34,16 +39,22 @@ public class EmoteServiceBean implements EmoteService {
}
@Override
public AEmote buildAEmoteFromReaction(MessageReaction.ReactionEmote reaction) {
public EmoteDto buildAEmoteFromReaction(MessageReaction.ReactionEmote reaction) {
if(reaction.isEmote()) {
return AEmote.builder().emoteKey(reaction.getName()).custom(true).emoteId(reaction.getEmote().getIdLong()).animated(reaction.getEmote().isAnimated()).build();
return EmoteDto.builder().emoteKey(reaction.getName()).custom(true).emoteId(reaction.getEmote().getIdLong()).animated(reaction.getEmote().isAnimated()).build();
} else {
return AEmote.builder().emoteKey(reaction.getEmoji()).custom(false).build();
return EmoteDto.builder().emoteKey(reaction.getEmoji()).custom(false).build();
}
}
@Override
public String getEmoteAsMention(AEmote emote, Long serverId, String defaultText) {
public Optional<EmoteDto> getEmoteByName(String name, Long serverId) {
Optional<AEmote> aEmote = emoteManagementService.loadEmoteByName(name, serverId);
return Optional.ofNullable(aEmote.map(emote -> emoteConverter.fromEmote(emote)).orElse(null));
}
@Override
public String getEmoteAsMention(EmoteDto emote, Long serverId, String defaultText) {
if(emote != null && emote.getCustom()) {
Optional<Emote> emoteOptional = botService.getEmote(serverId, emote);
if (emoteOptional.isPresent()) {
@@ -61,7 +72,7 @@ public class EmoteServiceBean implements EmoteService {
}
@Override
public String getEmoteAsMention(AEmote emote, Long serverId) {
public String getEmoteAsMention(EmoteDto emote, Long serverId) {
return this.getEmoteAsMention(emote, serverId, " ");
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementServiceBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -8,7 +8,7 @@ import org.springframework.stereotype.Component;
public class FeatureFlagServiceBean implements FeatureFlagService {
@Autowired
private FeatureFlagManagementService managementService;
private FeatureFlagManagementServiceBean managementService;
@Override
public boolean isFeatureEnabled(String name, Long serverId) {

View File

@@ -2,12 +2,12 @@ package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.exception.ChannelException;
import dev.sheldan.abstracto.core.exception.GuildException;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.service.management.EmoteManagementServiceBean;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.cache.*;
import dev.sheldan.abstracto.core.service.management.UserManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.requests.restaction.pagination.ReactionPaginationAction;
@@ -33,10 +33,10 @@ public class MessageCacheBean implements MessageCache {
private Bot bot;
@Autowired
private UserManagementService userManagementService;
private UserManagementServiceBean userManagementService;
@Autowired
private EmoteManagementService emoteManagementService;
private EmoteManagementServiceBean emoteManagementService;
@Autowired
private EmoteService emoteService;
@@ -153,9 +153,9 @@ public class MessageCacheBean implements MessageCache {
ReactionPaginationAction users = reaction.retrieveUsers().cache(false);
CachedReaction.CachedReactionBuilder builder = CachedReaction.builder();
List<AUser> ausers = new ArrayList<>();
List<UserDto> ausers = new ArrayList<>();
users.forEachAsync(user -> {
ausers.add(AUser.builder().id(user.getIdLong()).build());
ausers.add(UserDto.builder().id(user.getIdLong()).build());
return false;
}).thenAccept(o -> future.complete(builder.build()));
builder.users(ausers);

View File

@@ -2,8 +2,8 @@ package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.exception.EmoteException;
import dev.sheldan.abstracto.core.exception.GuildException;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.AEmote;
import dev.sheldan.abstracto.core.service.management.EmoteManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.Guild;
@@ -22,7 +22,7 @@ public class MessageServiceBean implements MessageService {
private Bot bot;
@Autowired
private EmoteManagementService emoteManagementService;
private EmoteManagementServiceBean emoteManagementService;
@Override
public void addReactionToMessage(String emoteKey, Long serverId, Message message) {

View File

@@ -1,11 +1,13 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.DynamicKeyLoader;
import dev.sheldan.abstracto.core.models.converter.PostTargetConverter;
import dev.sheldan.abstracto.core.exception.ChannelException;
import dev.sheldan.abstracto.core.exception.GuildException;
import dev.sheldan.abstracto.core.service.management.PostTargetManagement;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.core.models.PostTarget;
import dev.sheldan.abstracto.core.models.dto.PostTargetDto;
import dev.sheldan.abstracto.core.service.management.PostTargetManagementBean;
import dev.sheldan.abstracto.core.service.management.ServerManagementServiceBean;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild;
@@ -26,10 +28,10 @@ import java.util.concurrent.CompletableFuture;
public class PostTargetServiceBean implements PostTargetService {
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Autowired
private PostTargetManagement postTargetManagement;
private PostTargetManagementBean postTargetManagement;
@Autowired
private Bot botService;
@@ -40,19 +42,22 @@ public class PostTargetServiceBean implements PostTargetService {
@Autowired
private ChannelService channelService;
@Autowired
private PostTargetConverter postTargetConverter;
@Override
public CompletableFuture<Message> sendTextInPostTarget(String text, PostTarget target) {
public CompletableFuture<Message> sendTextInPostTarget(String text, PostTargetDto target) {
TextChannel textChannelForPostTarget = getTextChannelForPostTarget(target);
return textChannelForPostTarget.sendMessage(text).submit();
}
@Override
public CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, PostTarget target) {
public CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, PostTargetDto target) {
TextChannel textChannelForPostTarget = getTextChannelForPostTarget(target);
return textChannelForPostTarget.sendMessage(embed).submit();
}
private TextChannel getTextChannelForPostTarget(PostTarget target) {
private TextChannel getTextChannelForPostTarget(PostTargetDto target) {
Guild guild = botService.getInstance().getGuildById(target.getServerReference().getId());
if(guild != null) {
TextChannel textChannelById = guild.getTextChannelById(target.getChannelReference().getId());
@@ -69,10 +74,11 @@ public class PostTargetServiceBean implements PostTargetService {
}
}
private PostTarget getPostTarget(String postTargetName, Long serverId) {
@Override
public PostTargetDto getPostTarget(String postTargetName, Long serverId) {
PostTarget postTarget = postTargetManagement.getPostTarget(postTargetName, serverId);
if(postTarget != null) {
return postTarget;
return postTargetConverter.fromPostTarget(postTarget);
} else {
log.error("PostTarget {} in server {} was not found!", postTargetName, serverId);
throw new ChannelException(String.format("Incorrect post target configuration: Post target %s was not found.", postTargetName));
@@ -81,30 +87,30 @@ public class PostTargetServiceBean implements PostTargetService {
@Override
public CompletableFuture<Message> sendTextInPostTarget(String text, String postTargetName, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId);
PostTargetDto postTarget = this.getPostTarget(postTargetName, serverId);
return this.sendTextInPostTarget(text, postTarget);
}
@Override
public CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, String postTargetName, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId);
PostTargetDto postTarget = this.getPostTarget(postTargetName, serverId);
return this.sendEmbedInPostTarget(embed, postTarget);
}
@Override
public List<CompletableFuture<Message>> sendEmbedInPostTarget(MessageToSend message, String postTargetName, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId);
PostTargetDto postTarget = this.getPostTarget(postTargetName, serverId);
return this.sendEmbedInPostTarget(message, postTarget);
}
@Override
public List<CompletableFuture<Message>> sendEmbedInPostTarget(MessageToSend message, PostTarget target) {
public List<CompletableFuture<Message>> sendEmbedInPostTarget(MessageToSend message, PostTargetDto target) {
TextChannel textChannelForPostTarget = getTextChannelForPostTarget(target);
return channelService.sendMessageToEndInTextChannel(message, textChannelForPostTarget);
}
@Override
public List<CompletableFuture<Message>> editEmbedInPostTarget(Long messageId, MessageToSend message, PostTarget target) {
public List<CompletableFuture<Message>> editEmbedInPostTarget(Long messageId, MessageToSend message, PostTargetDto target) {
TextChannel textChannelForPostTarget = getTextChannelForPostTarget(target);
String messageText = message.getMessage();
if(StringUtils.isBlank(messageText)) {
@@ -115,7 +121,7 @@ public class PostTargetServiceBean implements PostTargetService {
}
@Override
public void editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, PostTarget target, List<CompletableFuture<Message>> future) {
public void editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, PostTargetDto target, List<CompletableFuture<Message>> future) {
TextChannel textChannelForPostTarget = getTextChannelForPostTarget(target);
if(StringUtils.isBlank(messageToSend.getMessage().trim())) {
textChannelForPostTarget
@@ -145,7 +151,7 @@ public class PostTargetServiceBean implements PostTargetService {
@Override
public void editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, String postTargetName, Long serverId, List<CompletableFuture<Message>> future) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId);
PostTargetDto postTarget = this.getPostTarget(postTargetName, serverId);
this.editOrCreatedInPostTarget(messageId, messageToSend, postTarget, future);
}
@@ -159,7 +165,7 @@ public class PostTargetServiceBean implements PostTargetService {
@Override
public List<CompletableFuture<Message>> editEmbedInPostTarget(Long messageId, MessageToSend message, String postTargetName, Long serverId) {
PostTarget postTarget = this.getPostTarget(postTargetName, serverId);
PostTargetDto postTarget = this.getPostTarget(postTargetName, serverId);
return editEmbedInPostTarget(messageId, message, postTarget);
}

View File

@@ -1,14 +1,16 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.converter.RoleConverter;
import dev.sheldan.abstracto.core.models.converter.ServerConverter;
import dev.sheldan.abstracto.core.listener.ServerConfigListener;
import dev.sheldan.abstracto.core.models.*;
import dev.sheldan.abstracto.core.models.dto.RoleDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.utils.ChannelUtils;
import dev.sheldan.abstracto.core.service.management.ChannelManagementServiceBean;
import dev.sheldan.abstracto.core.service.management.RoleManagementServiceBean;
import dev.sheldan.abstracto.core.service.management.ServerManagementServiceBean;
import dev.sheldan.abstracto.core.utils.SnowflakeUtils;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelType;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.database.AServer;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Guild;
@@ -36,17 +38,23 @@ public class StartupServiceBean implements Startup {
private List<? extends ListenerAdapter> listeners;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Autowired
private ChannelManagementService channelManagementService;
private ChannelManagementServiceBean channelManagementService;
@Autowired
private RoleManagementService roleManagementService;
private RoleManagementServiceBean roleManagementService;
@Autowired
private ServerConverter serverConverter;
@Autowired
private List<ServerConfigListener> configListeners;
@Autowired
private RoleConverter roleConverter;
@Override
public void startBot() throws LoginException {
@@ -58,16 +66,17 @@ public class StartupServiceBean implements Startup {
@Transactional
public void synchronize() {
log.info("Synchronizing servers.");
synchronizeServers();
// synchronizeServers();
log.info("Done synchronizing servers");
}
/*
private void synchronizeServers(){
JDA instance = service.getInstance();
List<Guild> onlineGuilds = instance.getGuilds();
Set<Long> availableServers = SnowflakeUtils.getSnowflakeIds(onlineGuilds);
availableServers.forEach(aLong -> {
AServer newAServer = serverManagementService.loadOrCreate(aLong);
ServerDto newAServer = serverManagementService.loadOrCreate(aLong);
Guild newGuild = instance.getGuildById(aLong);
log.debug("Synchronizing server: {}", aLong);
if(newGuild != null){
@@ -81,20 +90,20 @@ public class StartupServiceBean implements Startup {
}
private void synchronizeRolesOf(Guild guild, AServer existingAServer){
private void synchronizeRolesOf(Guild guild, ServerDto existingAServer){
List<Role> existingRoles = guild.getRoles();
List<ARole> knownARoles = existingAServer.getRoles();
List<RoleDto> knownARoles = existingAServer.getRoles();
Set<Long> knownRolesId = SnowflakeUtils.getOwnItemsIds(knownARoles);
Set<Long> availableRoles = SnowflakeUtils.getSnowflakeIds(existingRoles);
Set<Long> newRoles = SetUtils.disjunction(availableRoles, knownRolesId);
newRoles.forEach(aLong -> {
ARole newRole = roleManagementService.createRole(aLong);
log.debug("Adding new role: {}", aLong);
existingAServer.getRoles().add(newRole);
existingAServer.getRoles().add(roleConverter.fromARole(newRole));
});
}
private void synchronizeChannelsOf(Guild guild, AServer existingServer){
private void synchronizeChannelsOf(Guild guild, ServerDto existingServer){
List<GuildChannel> available = guild.getChannels();
List<AChannel> knownChannels = existingServer.getChannels().stream().filter(aChannel -> !aChannel.getDeleted()).collect(Collectors.toList());
Set<Long> knownChannelsIds = SnowflakeUtils.getOwnItemsIds(knownChannels);
@@ -103,7 +112,7 @@ public class StartupServiceBean implements Startup {
newChannels.forEach(aLong -> {
GuildChannel channel1 = available.stream().filter(channel -> channel.getIdLong() == aLong).findFirst().get();
log.debug("Adding new channel: {}", aLong);
AChannelType type = AChannel.getAChannelType(channel1.getType());
AChannelType type = ChannelUtils.getAChannelType(channel1.getType());
AChannel newChannel = channelManagementService.createChannel(channel1.getIdLong(), type);
serverManagementService.addChannelToServer(existingServer, newChannel);
});
@@ -113,4 +122,7 @@ public class StartupServiceBean implements Startup {
channelManagementService.markAsDeleted(aLong);
});
}
*/
}

View File

@@ -0,0 +1,27 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.management.UserManagementServiceBean;
import net.dv8tion.jda.api.entities.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class UserServiceBean implements UserService {
@Autowired
private UserManagementServiceBean userManagementServiceBean;
@Override
public UserInServerDto loadUser(Member member) {
return userManagementServiceBean.loadUser(member.getGuild().getIdLong(), member.getIdLong());
}
@Override
public UserInServerDto loadUser(Long serverId, Long userId) {
return userManagementServiceBean.loadUser(serverId, userId);
}
}

View File

@@ -2,10 +2,17 @@ package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.command.exception.ChannelGroupException;
import dev.sheldan.abstracto.core.exception.ChannelException;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AChannelGroup;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.models.converter.ChannelGroupConverter;
import dev.sheldan.abstracto.core.models.converter.ServerConverter;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ChannelGroupDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.repository.ChannelGroupRepository;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -13,39 +20,45 @@ import java.util.List;
import java.util.function.Predicate;
@Component
public class ChannelGroupManagementServiceBean implements ChannelGroupManagementService {
public class ChannelGroupManagementServiceBean {
@Autowired
private ChannelGroupRepository channelGroupRepository;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Override
public AChannelGroup createChannelGroup(String name, AServer server) {
@Autowired
private ServerConverter serverConverter;
@Autowired
private ChannelGroupConverter channelGroupConverter;
@Autowired
private ChannelConverter channelConverter;
public AChannelGroup createChannelGroup(String name, ServerDto server) {
name = name.toLowerCase();
AChannelGroup channelGroup = AChannelGroup
.builder()
.groupName(name)
.server(server)
.server(serverConverter.fromDto(server))
.build();
channelGroupRepository.save(channelGroup);
return channelGroup;
}
@Override
public void deleteChannelGroup(String name, AServer server) {
public void deleteChannelGroup(String name, ServerDto server) {
name = name.toLowerCase();
AChannelGroup existing = findByNameAndServer(name, server);
AChannelGroup existing = findByNameAndServer(name, serverConverter.fromDto(server));
if(existing == null) {
throw new ChannelGroupException(String.format("Channel group %s does not exist", name));
}
channelGroupRepository.delete(existing);
}
@Override
public AChannelGroup addChannelToChannelGroup(AChannelGroup channelGroup, AChannel channel) {
Predicate<AChannel> channelInGroupPredicate = channel1 -> channel1.getId().equals(channel.getId());
public ChannelGroupDto addChannelToChannelGroup(ChannelGroupDto channelGroup, ChannelDto channel) {
Predicate<ChannelDto> channelInGroupPredicate = channel1 -> channel1.getId().equals(channel.getId());
if(channelGroup == null) {
throw new ChannelGroupException("Channel group was not found.");
}
@@ -53,36 +66,43 @@ public class ChannelGroupManagementServiceBean implements ChannelGroupManagement
throw new ChannelException(String.format("Channel %s is already part of group %s.", channel.getId(), channelGroup.getGroupName()));
}
channelGroup.getChannels().add(channel);
channel.getGroups().add(channelGroup);
channelGroupRepository.save(channelGroup);
AChannel channel1 = channelConverter.fromDto(channel);
AChannelGroup entity = channelGroupConverter.fromChannelGroup(channelGroup);
channel1.getGroups().add(entity);
channelGroupRepository.save(entity);
return channelGroup;
}
@Override
public void removeChannelFromChannelGroup(AChannelGroup channelGroup, AChannel channel) {
Predicate<AChannel> channelInGroupPredicate = channel1 -> channel1.getId().equals(channel.getId());
public void removeChannelFromChannelGroup(ChannelGroupDto channelGroup, ChannelDto channel) {
Predicate<ChannelDto> channelInGroupPredicate = channel1 -> channel1.getId().equals(channel.getId());
if(channelGroup.getChannels().stream().noneMatch(channelInGroupPredicate)) {
throw new ChannelException(String.format("Channel %s is not part of group %s.", channel.getId(), channelGroup.getGroupName()));
}
channelGroup.getChannels().removeIf(channelInGroupPredicate);
channel.getGroups().removeIf(channelGroup1 -> channelGroup1.getId().equals(channelGroup.getId()));
channelGroupRepository.save(channelGroup);
channelGroupRepository.save(channelGroupConverter.fromChannelGroup(channelGroup));
}
@Override
public AChannelGroup findByNameAndServer(String name, AServer server) {
public ChannelGroupDto findByNameAndServer(String name, ServerDto server) {
name = name.toLowerCase();
AChannelGroup byGroupNameAndServer = channelGroupRepository.findByGroupNameAndServer(name, serverConverter.fromDto(server));
return channelGroupConverter.fromChannelGroup(byGroupNameAndServer);
}
private AChannelGroup findByNameAndServer(String name, AServer server) {
name = name.toLowerCase();
return channelGroupRepository.findByGroupNameAndServer(name, server);
}
@Override
public List<AChannelGroup> findAllInServer(AServer server) {
public List<AChannelGroup> findAllInServer(ServerDto server) {
return findAllInServer(serverConverter.fromDto(server));
}
private List<AChannelGroup> findAllInServer(AServer server) {
return channelGroupRepository.findByServer(server);
}
@Override
public List<AChannelGroup> findAllInServer(Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
ServerDto server = serverManagementService.loadOrCreate(serverId);
return findAllInServer(server);
}
}

View File

@@ -1,7 +1,9 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelType;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AChannelType;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.repository.ChannelRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -9,30 +11,30 @@ import org.springframework.stereotype.Service;
@Service
@Slf4j
public class ChannelManagementServiceBean implements ChannelManagementService {
public class ChannelManagementServiceBean {
@Autowired
private ChannelRepository repository;
@Override
public AChannel loadChannel(Long id) {
return repository.getOne(id);
@Autowired
private ChannelConverter channelConverter;
public ChannelDto loadChannel(Long id) {
return channelConverter.fromChannel(repository.getOne(id));
}
@Override
public AChannel createChannel(Long id, AChannelType type) {
public ChannelDto createChannel(Long id, AChannelType type) {
log.info("Creating channel {} with type {}", id, type);
return repository.save(AChannel.builder().id(id).type(type).deleted(false).build());
AChannel save = repository.save(AChannel.builder().id(id).type(type).deleted(false).build());
return channelConverter.fromChannel(save);
}
@Override
public void markAsDeleted(Long id) {
AChannel channel = loadChannel(id);
ChannelDto channel = loadChannel(id);
channel.setDeleted(true);
repository.save(channel);
repository.save(channelConverter.fromDto(channel));
}
@Override
public void removeChannel(Long id) {
log.info("Deleting channel {}", id);
repository.deleteById(id);

View File

@@ -1,21 +1,20 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.AConfig;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AConfig;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.repository.ConfigRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ConfigManagementServiceBean implements ConfigManagementService {
public class ConfigManagementServiceBean {
@Autowired
private ConfigRepository configRepository;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Override
public void setOrCreateStringValue(Long serverId, String name, String value) {
AConfig config = loadConfig(serverId, name);
if(config == null) {
@@ -26,7 +25,6 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
}
}
@Override
public void setOrCreateDoubleValue(Long serverId, String name, Double value) {
AConfig config = loadConfig(serverId, name);
if(config == null) {
@@ -37,9 +35,8 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
}
}
@Override
public AConfig createConfig(Long serverId, String name, String value) {
AServer server = serverManagementService.loadOrCreate(serverId);
AServer server = AServer.builder().id(serverId).build();
AConfig config = AConfig
.builder()
.stringValue(value)
@@ -50,9 +47,8 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
return config;
}
@Override
public AConfig createConfig(Long serverId, String name, Double value) {
AServer server = serverManagementService.loadOrCreate(serverId);
AServer server = AServer.builder().id(serverId).build();
AConfig config = AConfig
.builder()
.doubleValue(value)
@@ -63,7 +59,6 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
return config;
}
@Override
public AConfig createIfNotExists(Long serverId, String name, String value) {
AConfig config = loadConfig(serverId, name);
if(config == null) {
@@ -72,7 +67,6 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
return config;
}
@Override
public AConfig createIfNotExists(Long serverId, String name, Double value) {
AConfig config = loadConfig(serverId, name);
if(config == null) {
@@ -81,7 +75,6 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
return config;
}
@Override
public AConfig loadConfig(Long serverId, String name) {
return configRepository.findAConfigByServerIdAndName(serverId, name);
}

View File

@@ -2,8 +2,12 @@ package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.DynamicKeyLoader;
import dev.sheldan.abstracto.core.exception.EmoteException;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AEmote;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.converter.EmoteConverter;
import dev.sheldan.abstracto.core.models.converter.ServerConverter;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.repository.EmoteRepository;
import net.dv8tion.jda.api.entities.Emote;
@@ -14,13 +18,13 @@ import java.util.List;
import java.util.Optional;
@Component
public class EmoteManagementServiceBean implements EmoteManagementService {
public class EmoteManagementServiceBean {
@Autowired
private EmoteRepository repository;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Autowired
private DynamicKeyLoader dynamicKeyLoader;
@@ -28,19 +32,23 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
@Autowired
private Bot botService;
@Override
@Autowired
private ServerConverter serverConverter;
@Autowired
private EmoteConverter emoteConverter;
public AEmote loadEmote(Long id) {
return repository.getOne(id);
}
@Override
public AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
ServerDto server = ServerDto.builder().id(serverId).build();
return this.createCustomEmote(name, emoteKey, emoteId, animated, server);
}
@Override
public AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated, AServer server) {
public AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated, ServerDto server) {
AServer aServer = serverConverter.fromDto(server);
validateEmoteName(name);
AEmote emoteToCreate = AEmote
.builder()
@@ -49,46 +57,42 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
.animated(animated)
.emoteId(emoteId)
.emoteKey(emoteKey)
.serverRef(server)
.serverRef(aServer)
.build();
repository.save(emoteToCreate);
return emoteToCreate;
}
@Override
public AEmote createDefaultEmote(String name, String emoteKey, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
ServerDto server = ServerDto.builder().id(serverId).build();
return createDefaultEmote(name, emoteKey, server);
}
@Override
public AEmote createDefaultEmote(String name, String emoteKey, AServer server) {
public AEmote createDefaultEmote(String name, String emoteKey, ServerDto server) {
validateEmoteName(name);
AServer aServer = AServer.builder().id(server.getId()).build();
AEmote emoteToCreate = AEmote
.builder()
.custom(false)
.name(name)
.emoteKey(emoteKey)
.serverRef(server)
.serverRef(aServer)
.build();
repository.save(emoteToCreate);
return emoteToCreate;
}
@Override
public Optional<AEmote> loadEmoteByName(String name, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
ServerDto server = ServerDto.builder().id(serverId).build();
return loadEmoteByName(name, server);
}
@Override
public Optional<AEmote> loadEmoteByName(String name, AServer server) {
return Optional.ofNullable(repository.findAEmoteByNameAndServerRef(name, server));
public Optional<AEmote> loadEmoteByName(String name, ServerDto server) {
return Optional.ofNullable(repository.findAEmoteByNameAndServerRef(name, serverConverter.fromDto(server)));
}
@Override
public AEmote setEmoteToCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
ServerDto server = ServerDto.builder().id(serverId).build();
AEmote emote;
Optional<AEmote> emoteOptional = loadEmoteByName(name, server);
if(!emoteOptional.isPresent()) {
@@ -104,11 +108,10 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
return emote;
}
@Override
public AEmote setEmoteToCustomEmote(String name, Emote emote, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
ServerDto server = ServerDto.builder().id(serverId).build();
AEmote emoteBeingSet;
Optional<AEmote> emoteOptional = loadEmoteByName(name, serverId);
Optional<AEmote> emoteOptional = loadEmoteByName(name, server);
if(!emoteOptional.isPresent()) {
emoteBeingSet = this.createCustomEmote(name, emote.getName(), emote.getIdLong(), emote.isAnimated(), server);
} else {
@@ -122,9 +125,8 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
return emoteBeingSet;
}
@Override
public AEmote setEmoteToDefaultEmote(String name, String emoteKey, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
public EmoteDto setEmoteToDefaultEmote(String name, String emoteKey, Long serverId) {
ServerDto server = ServerDto.builder().id(serverId).build();
AEmote emoteBeingSet;
Optional<AEmote> emoteOptional = loadEmoteByName(name, serverId);
if(!emoteOptional.isPresent()) {
@@ -135,21 +137,19 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
emoteBeingSet.setCustom(false);
repository.save(emoteBeingSet);
}
return emoteBeingSet;
return emoteConverter.fromEmote(emoteBeingSet);
}
@Override
public boolean emoteExists(String name, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
return emoteExists(name, server);
ServerDto serverDto = ServerDto.builder().id(serverId).build();
return emoteExists(name, serverDto);
}
@Override
public boolean emoteExists(String name, AServer server) {
return repository.existsByNameAndServerRef(name, server);
public boolean emoteExists(String name, ServerDto server) {
AServer server1 = AServer.builder().id(server.getId()).build();
return repository.existsByNameAndServerRef(name, server1);
}
@Override
public AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated) {
AEmote emote = AEmote.builder()
.animated(animated)
@@ -162,7 +162,6 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
return emote;
}
@Override
public AEmote createDefaultEmote(String name, String emoteKey) {
AEmote emote = AEmote.builder()
.custom(false)

View File

@@ -1,7 +1,8 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AFeatureFlag;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.repository.FeatureFlagRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -9,38 +10,35 @@ import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public class FeatureFlagManagementServiceBean implements FeatureFlagManagementService {
public class FeatureFlagManagementServiceBean {
@Autowired
private FeatureFlagRepository repository;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Override
public void createFeatureFlag(String key, Long serverId, Boolean newValue) {
AServer server = serverManagementService.loadOrCreate(serverId);
ServerDto server = ServerDto.builder().id(serverId).build();
createFeatureFlag(key, server, newValue);
}
@Override
public void createFeatureFlag(String key, AServer server, Boolean newValue) {
public void createFeatureFlag(String key, ServerDto server, Boolean newValue) {
AServer aServer = AServer.builder().id(server.getId()).build();
AFeatureFlag featureFlag = AFeatureFlag
.builder()
.enabled(newValue)
.key(key)
.server(server)
.server(aServer)
.build();
repository.save(featureFlag);
}
@Override
public boolean getFeatureFlagValue(String key, Long serverId) {
Optional<AFeatureFlag> featureFlag = getFeatureFlag(key, serverId);
return featureFlag.isPresent() && featureFlag.get().isEnabled();
}
@Override
public void updateOrCreateFeatureFlag(String key, Long serverId, Boolean newValue) {
Optional<AFeatureFlag> existing = getFeatureFlag(key, serverId);
if(existing.isPresent()) {
@@ -52,9 +50,8 @@ public class FeatureFlagManagementServiceBean implements FeatureFlagManagementSe
}
}
@Override
public Optional<AFeatureFlag> getFeatureFlag(String key, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
AServer server = AServer.builder().id(serverId).build();
return Optional.ofNullable(repository.findByServerAndKey(server, key));
}
}

View File

@@ -2,27 +2,28 @@ package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.DynamicKeyLoader;
import dev.sheldan.abstracto.core.exception.PostTargetException;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.PostTarget;
import 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.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.repository.PostTargetRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class PostTargetManagementBean implements PostTargetManagement {
public class PostTargetManagementBean {
@Autowired
private PostTargetRepository postTargetRepository;
@Autowired
private ChannelManagementService channelManagementService;
private ChannelManagementServiceBean channelManagementService;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Autowired
private DynamicKeyLoader dynamicKeyLoader;
@@ -30,18 +31,25 @@ public class PostTargetManagementBean implements PostTargetManagement {
@Autowired
private PostTargetService postTargetService;
@Override
public void createPostTarget(String name, AServer server, AChannel targetChannel) {
public void createPostTarget(String name, ServerDto server, ChannelDto targetChannel) {
if(!postTargetService.validPostTarget(name)) {
throw new PostTargetException("PostTarget not found. Possible values are: " + String.join(", ", dynamicKeyLoader.getPostTargetsAsList()));
}
log.info("Creating post target {} pointing towards {}", name, targetChannel);
postTargetRepository.save(PostTarget.builder().name(name).channelReference(targetChannel).serverReference(server).build());
AChannel aChannel = AChannel.builder().id(targetChannel.getId()).build();
AServer aServer = AServer.builder().id(server.getId()).build();
PostTarget build = PostTarget
.builder()
.name(name)
.channelReference(aChannel)
.serverReference(aServer)
.build();
postTargetRepository.save(build);
}
@Override
public void createOrUpdate(String name, AServer server, AChannel targetChannel) {
PostTarget existing = postTargetRepository.findPostTargetByNameAndServerReference(name, server);
public void createOrUpdate(String name, ServerDto server, ChannelDto targetChannel) {
AServer aServer = AServer.builder().id(server.getId()).build();
PostTarget existing = postTargetRepository.findPostTargetByNameAndServerReference(name, aServer);
if(existing == null){
this.createPostTarget(name, server, targetChannel);
} else {
@@ -49,34 +57,30 @@ public class PostTargetManagementBean implements PostTargetManagement {
}
}
@Override
public void createOrUpdate(String name, AServer server, Long channelId) {
AChannel dbChannel = channelManagementService.loadChannel(channelId);
createOrUpdate(name, server, dbChannel);
public void createOrUpdate(String name, ServerDto server, Long channelId) {
ChannelDto channelDto = ChannelDto.builder().id(channelId).build();
createOrUpdate(name, server, channelDto);
}
@Override
public void createOrUpdate(String name, Long serverId, Long channelId) {
AChannel dbChannel = channelManagementService.loadChannel(channelId);
AServer dbServer = serverManagementService.loadOrCreate(serverId);
createOrUpdate(name, dbServer, dbChannel);
ChannelDto channelDto = ChannelDto.builder().id(channelId).build();
ServerDto serverDto = ServerDto.builder().id(serverId).build();
createOrUpdate(name, serverDto, channelDto);
}
@Override
@Cacheable("posttargets")
public PostTarget getPostTarget(String name, AServer server) {
return postTargetRepository.findPostTargetByNameAndServerReference(name, server);
public PostTarget getPostTarget(String name, ServerDto server) {
AServer aServer = AServer.builder().id(server.getId()).build();
return postTargetRepository.findPostTargetByNameAndServerReference(name, aServer);
}
@Override
public PostTarget getPostTarget(String name, Long serverId) {
AServer server = serverManagementService.loadOrCreate(serverId);
return getPostTarget(name, server);
ServerDto serverDto = ServerDto.builder().id(serverId).build();
return getPostTarget(name, serverDto);
}
@Override
public void updatePostTarget(PostTarget target, AServer server, AChannel newTargetChannel) {
postTargetRepository.getOne(target.getId()).setChannelReference(newTargetChannel);
public void updatePostTarget(PostTarget target, ServerDto server, ChannelDto newTargetChannel) {
AChannel aChannel = AChannel.builder().id(newTargetChannel.getId()).build();
postTargetRepository.getOne(target.getId()).setChannelReference(aChannel);
}
}

View File

@@ -1,17 +1,16 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.ARole;
import dev.sheldan.abstracto.core.repository.RoleRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RoleManagementServiceBean implements RoleManagementService {
public class RoleManagementServiceBean {
@Autowired
private RoleRepository repository;
@Override
public ARole createRole(Long id) {
return repository.save(ARole.builder().id(id).build());
}

View File

@@ -1,91 +1,99 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.*;
import dev.sheldan.abstracto.core.models.*;
import dev.sheldan.abstracto.core.models.converter.PostTargetConverter;
import dev.sheldan.abstracto.core.models.converter.ServerConverter;
import dev.sheldan.abstracto.core.models.dto.*;
import dev.sheldan.abstracto.core.repository.ServerRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@Slf4j
public class ServerManagementServiceBean implements ServerManagementService {
public class ServerManagementServiceBean {
@Autowired
private ServerRepository repository;
@Autowired
private PostTargetManagement postTargetManagement;
private PostTargetManagementBean postTargetManagement;
@Autowired
private ChannelManagementService channelManagementService;
private ChannelManagementServiceBean channelManagementService;
@Autowired
private UserManagementService userManagementService;
private UserManagementServiceBean userManagementService;
@Override
public AServer createServer(Long id) {
return repository.save(AServer.builder().id(id).build());
@Autowired
private ServerConverter serverConverter;
@Autowired
private PostTargetConverter postTargetConverter;
public ServerDto createServer(Long id) {
AServer aServer = AServer.builder().id(id).build();
return serverConverter.convertServer(repository.save(aServer));
}
@Override
public AServer loadOrCreate(Long id) {
public ServerDto loadOrCreate(Long id) {
if(repository.existsById(id)) {
return repository.getOne(id);
return serverConverter.convertServer(repository.getOne(id));
} else {
return createServer(id);
}
}
@Override
public void addChannelToServer(AServer server, AChannel channel) {
public void addChannelToServer(ServerDto server, ChannelDto channel) {
server.getChannels().add(channel);
channel.setServer(server);
repository.save(server);
repository.save(serverConverter.fromDto(server));
}
@Override
public AUserInAServer addUserToServer(AServer server, AUser user) {
public UserInServerDto addUserToServer(ServerDto server, UserDto user) {
return this.addUserToServer(server.getId(), user.getId());
}
@Override
public AUserInAServer addUserToServer(Long serverId, Long userId) {
public UserInServerDto addUserToServer(Long serverId, Long userId) {
log.info("Adding user {} to server {}", userId, serverId);
AServer server = repository.getOne(serverId);
AUser user = userManagementService.loadUser(userId);
AUserInAServer aUserInAServer = AUserInAServer.builder().serverReference(server).userReference(user).build();
ServerDto server = ServerDto.builder().id(serverId).build();
UserDto user = userManagementService.loadUser(userId);
UserInServerDto aUserInAServer = UserInServerDto.builder().server(server).user(user).build();
server.getUsers().add(aUserInAServer);
repository.save(serverConverter.fromDto(server));
return aUserInAServer;
}
@Override
public AChannel getPostTarget(Long serverId, String name) {
AServer server = this.loadOrCreate(serverId);
return getPostTarget(server, name);
public ChannelDto getPostTarget(Long serverId, String name) {
ServerDto serverDto = ServerDto.builder().id(serverId).build();
return getPostTarget(serverDto, name);
}
@Override
public AChannel getPostTarget(Long serverId, PostTarget target) {
AServer server = this.loadOrCreate(serverId);
return getPostTarget(server, target);
public ChannelDto getPostTarget(Long serverId, PostTargetDto target) {
ServerDto serverDto = ServerDto.builder().id(serverId).build();
return getPostTarget(serverDto, target);
}
@Override
public AChannel getPostTarget(AServer server, PostTarget target) {
public ChannelDto getPostTarget(ServerDto server, PostTargetDto target) {
return target.getChannelReference();
}
@Override
public AChannel getPostTarget(AServer server, String name) {
public ChannelDto getPostTarget(ServerDto server, String name) {
PostTarget target = postTargetManagement.getPostTarget(name, server);
return getPostTarget(server, target);
return getPostTarget(server, postTargetConverter.fromPostTarget(target));
}
@Override
public List<AServer> getAllServers() {
return repository.findAll();
public List<ServerDto> getAllServers() {
List<ServerDto> servers = new ArrayList<>();
List<AServer> all = repository.findAll();
all.forEach(aServer -> {
servers.add(serverConverter.convertServer(aServer));
});
return servers;
}

View File

@@ -1,8 +1,11 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.*;
import dev.sheldan.abstracto.core.models.converter.UserConverter;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.repository.UserInServerRepository;
import dev.sheldan.abstracto.core.repository.UserRepository;
import lombok.extern.slf4j.Slf4j;
@@ -12,7 +15,7 @@ import org.springframework.stereotype.Component;
@Component
@Slf4j
public class UserManagementServiceBean implements UserManagementService {
public class UserManagementServiceBean {
@Autowired
private UserInServerRepository userInServerRepository;
@@ -21,57 +24,58 @@ public class UserManagementServiceBean implements UserManagementService {
private UserRepository userRepository;
@Autowired
private ServerManagementService serverManagementService;
private ServerManagementServiceBean serverManagementService;
@Autowired
private UserConverter userConverter;
@Autowired
private UserInServerConverter userInServerConverter;
@Override
public AUserInAServer loadUser(Long serverId, Long userId) {
AUser user = this.loadUser(userId);
AServer server = serverManagementService.loadOrCreate(serverId);
return loadUser(server, user);
public UserInServerDto loadUser(Long serverId, Long userId) {
UserDto user = UserDto.builder().id(userId).build();
ServerDto serverDto = ServerDto.builder().id(userId).build();
return loadUser(serverDto, user);
}
@Override
public AUserInAServer loadUser(AServer server, AUser user) {
if(userInServerRepository.existsByServerReferenceAndUserReference(server, user)) {
return userInServerRepository.findByServerReferenceAndUserReference(server, user);
public UserInServerDto loadUser(ServerDto server, UserDto user) {
AServer server1 = AServer.builder().id(server.getId()).build();
AUser user1 = AUser.builder().id(user.getId()).build();
if(userInServerRepository.existsByServerReferenceAndUserReference(server1, user1)) {
AUserInAServer byServerReferenceAndUserReference = userInServerRepository.findByServerReferenceAndUserReference(server1, user1);
return userInServerConverter.fromAUserInAServer(byServerReferenceAndUserReference);
} else {
return this.createUserInServer(server.getId(), user.getId());
}
}
@Override
public AUserInAServer loadUser(Member member) {
public UserInServerDto loadUser(Member member) {
return this.loadUser(member.getGuild().getIdLong(), member.getIdLong());
}
@Override
public AUserInAServer createUserInServer(Member member) {
public UserInServerDto createUserInServer(Member member) {
return this.createUserInServer(member.getGuild().getIdLong(), member.getIdLong());
}
@Override
public AUserInAServer createUserInServer(Long guildId, Long userId) {
public UserInServerDto createUserInServer(Long guildId, Long userId) {
return serverManagementService.addUserToServer(guildId, userId);
}
@Override
public AUser createUser(Member member) {
public UserDto createUser(Member member) {
return createUser(member.getIdLong());
}
@Override
public AUser createUser(Long userId) {
public UserDto createUser(Long userId) {
log.info("Creating user {}", userId);
AUser aUser = AUser.builder().id(userId).build();
userRepository.save(aUser);
return aUser;
return userConverter.fromAUser(aUser);
}
@Override
public AUser loadUser(Long userId) {
public UserDto loadUser(Long userId) {
if(userRepository.existsById(userId)) {
return userRepository.getOne(userId);
return userConverter.fromAUser(userRepository.getOne(userId));
} else {
return this.createUser(userId);
}

View File

@@ -14,6 +14,11 @@
<dependencies>
<dependency>
<groupId>dev.sheldan.abstracto.core</groupId>
<artifactId>core-db-models</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
@@ -22,10 +27,6 @@
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>dev.sheldan.abstracto.templating</groupId>
<artifactId>templating-interface</artifactId>

View File

@@ -2,9 +2,9 @@ package dev.sheldan.abstracto.core.command.condition;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.service.ChannelGroupCommandService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -15,12 +15,12 @@ public class CommandDisabledCondition implements CommandCondition {
private ChannelGroupCommandService channelGroupCommandService;
@Autowired
private CommandManagementService commandManagementService;
private CommandService commandManagementService;
@Override
public ConditionResult shouldExecute(CommandContext context, Command command) {
ACommand acommand = commandManagementService.findCommandByName(command.getConfiguration().getName());
Boolean booleanResult = channelGroupCommandService.isCommandEnabled(acommand, context.getUserInitiatedContext().getChannel());
CommandDto commandDto = commandManagementService.findCommandByName(command.getConfiguration().getName());
Boolean booleanResult = channelGroupCommandService.isCommandEnabled(commandDto, context.getUserInitiatedContext().getChannel());
return ConditionResult.builder().result(booleanResult).reason("Command is disabled.").build();
}
}

View File

@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.core.command.condition;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -10,7 +10,7 @@ import org.springframework.stereotype.Component;
public class FeatureEnabledCondition implements CommandCondition {
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
private FeatureFlagService featureFlagManagementService;
@Override
public ConditionResult shouldExecute(CommandContext context, Command command) {
@@ -18,7 +18,7 @@ public class FeatureEnabledCondition implements CommandCondition {
boolean featureFlagValue = false;
String reason = "";
if(featureName != null) {
featureFlagValue = featureFlagManagementService.getFeatureFlagValue(featureName, context.getGuild().getIdLong());
featureFlagValue = featureFlagManagementService.isFeatureEnabled(featureName, context.getGuild().getIdLong());
reason = "Feature has been disabled.";
}
return ConditionResult.builder().reason(reason).result(featureFlagValue).build();

View File

@@ -3,7 +3,7 @@ package dev.sheldan.abstracto.core.command.config;
import org.springframework.stereotype.Service;
@Service
public class AbstracatoModuleInterface implements ModuleInterface {
public class AbstractoModuleInterface implements ModuleInterface {
@Override
public ModuleInfo getInfo() {
return ModuleInfo.builder().name("default").description("Default module provided by abstracto").build();

View File

@@ -5,7 +5,8 @@ import lombok.Getter;
import java.util.List;
@Getter @Builder
@Getter
@Builder
public class CommandConfiguration {
private String name;

View File

@@ -6,7 +6,8 @@ import lombok.Getter;
import java.util.List;
@Getter @Builder
@Getter
@Builder
public class CommandHierarchy {
private List<PackedModule> rootModules;

View File

@@ -3,7 +3,8 @@ package dev.sheldan.abstracto.core.command.config;
import lombok.Builder;
import lombok.Getter;
@Getter @Builder
@Getter
@Builder
public class HelpInfo {
private String usage;
private String longHelp;

View File

@@ -3,7 +3,8 @@ package dev.sheldan.abstracto.core.command.config;
import lombok.Builder;
import lombok.Getter;
@Getter @Builder
@Getter
@Builder
public class ModuleInfo {
private String name;

View File

@@ -1,8 +1,6 @@
package dev.sheldan.abstracto.core.command.config;
import dev.sheldan.abstracto.core.command.config.ModuleInfo;
public interface ModuleInterface {
ModuleInfo getInfo();
String getParentModule();

View File

@@ -4,7 +4,9 @@ import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter @Setter @Builder
@Getter
@Setter
@Builder
public class Parameter {
private String name;
private Class type;

View File

@@ -6,7 +6,7 @@ import lombok.Getter;
import java.util.List;
@Builder
@Getter
public class Parameters {
@Getter
private List<Object> parameters;
}

View File

@@ -5,7 +5,9 @@ import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter @Setter @Builder
@Getter
@Setter
@Builder
public class CommandResult {
private ResultState result;
private String message;

Some files were not shown because too many files have changed in this diff Show More