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

@@ -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;

View File

@@ -1,27 +0,0 @@
package dev.sheldan.abstracto.core.command.models.database;
import lombok.*;
import javax.persistence.*;
@Entity
@Table(name = "command")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class ACommand {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@Getter
@Setter
@JoinColumn(name = "module_id")
private AModule module;
}

View File

@@ -1,34 +0,0 @@
package dev.sheldan.abstracto.core.command.models.database;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "module")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class AModule {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(
fetch = FetchType.LAZY,
cascade = CascadeType.ALL,
orphanRemoval = true)
@Builder.Default
@JoinColumn(name = "module_id")
private List<ACommand> commands = new ArrayList<>();
}

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.command.service;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
public interface ChannelGroupCommandService {
Boolean isCommandEnabled(ACommand command, AChannel channel);
Boolean isCommandEnabled(CommandDto command, ChannelDto channel);
}

View File

@@ -1,8 +1,9 @@
package dev.sheldan.abstracto.core.command.service;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
public interface CommandService {
ACommand createCommand(String name, String moduleName);
CommandDto createCommand(String name, String moduleName);
Boolean doesCommandExist(String name);
CommandDto findCommandByName(String name);
}

View File

@@ -0,0 +1,9 @@
package dev.sheldan.abstracto.core.command.service;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import net.dv8tion.jda.api.entities.Member;
public interface UserService {
UserInServerDto loadUser(Member member);
UserInServerDto loadUser(Long serverId, Long userId);
}

View File

@@ -1,14 +0,0 @@
package dev.sheldan.abstracto.core.command.service.management;
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 java.util.List;
public interface ChannelGroupCommandManagementService {
void setCommandInGroupTo(ACommand command, AChannelGroup group, Boolean enabled);
AChannelGroupCommand createCommandInGroupTo(ACommand command, AChannelGroup group);
AChannelGroupCommand getChannelGroupCommand(ACommand command, AChannelGroup group);
List<AChannelGroupCommand> getAllGroupCommandsForCommand(ACommand command);
}

View File

@@ -1,11 +0,0 @@
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;
public interface CommandManagementService {
ACommand createCommand(String name, String moduleName);
ACommand createCommand(String name, AModule moduleName);
ACommand findCommandByName(String name);
Boolean doesCommandExist(String name);
}

View File

@@ -1,10 +0,0 @@
package dev.sheldan.abstracto.core.command.service.management;
import dev.sheldan.abstracto.core.command.models.database.AModule;
public interface ModuleManagementService {
AModule createModule(String name);
AModule getOrCreate(String name);
AModule findModuleByName(String name);
Boolean doesModuleExist(String name);
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.converter;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.template.ChannelModel;
import org.springframework.stereotype.Component;
@Component
public class ChannelModelConverter {
public ChannelModel fromChanel(ChannelDto channelDto) {
return ChannelModel
.builder()
.id(channelDto.getId())
.build();
}
}

View File

@@ -0,0 +1,12 @@
package dev.sheldan.abstracto.core.converter;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.template.ServerModel;
import org.springframework.stereotype.Component;
@Component
public class ServerModelConverter {
public ServerModel fromServer(ServerDto server) {
return ServerModel.builder().id(server.getId()).name(server.getName()).build();
}
}

View File

@@ -0,0 +1,37 @@
package dev.sheldan.abstracto.core.converter;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.models.template.UserInServerModel;
import net.dv8tion.jda.api.entities.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class UserInServerModelConverter {
@Autowired
private ServerModelConverter serverModelConverter;
@Autowired
private UserModelConverter userModelConverter;
@Autowired
private UserService userService;
public UserInServerModel fromUser(UserInServerDto userInServerDto) {
return UserInServerModel
.builder()
.userInServerId(userInServerDto.getUserInServerId())
.server(serverModelConverter.fromServer(userInServerDto.getServer()))
.user(userModelConverter.fromUser(userInServerDto.getUser()))
.build();
}
public UserInServerModel fromMember(Member member) {
return fromUser(userService.loadUser(member));
}
}

View File

@@ -0,0 +1,12 @@
package dev.sheldan.abstracto.core.converter;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.template.UserModel;
import org.springframework.stereotype.Component;
@Component
public class UserModelConverter {
public UserModel fromUser(UserDto user) {
return UserModel.builder().id(user.getId()).build();
}
}

View File

@@ -1,7 +0,0 @@
package dev.sheldan.abstracto.core.exception;
public class FeatureDisabledException extends AbstractoRunTimeException {
public FeatureDisabledException(String message) {
super(message);
}
}

View File

@@ -1,9 +1,9 @@
package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.entities.MessageReaction;
public interface ReactedAddedListener extends FeatureAware {
void executeReactionAdded(CachedMessage message, MessageReaction reaction, AUserInAServer userAdding);
void executeReactionAdded(CachedMessage message, MessageReaction reaction, UserInServerDto userAdding);
}

View File

@@ -1,9 +1,9 @@
package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.entities.MessageReaction;
public interface ReactedRemovedListener extends FeatureAware {
void executeReactionRemoved(CachedMessage message, MessageReaction reaction, AUserInAServer userRemoving);
void executeReactionRemoved(CachedMessage message, MessageReaction reaction, UserInServerDto userRemoving);
}

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
public interface ServerConfigListener {
void updateServerConfig(AServer server);
void updateServerConfig(ServerDto server);
}

View File

@@ -1,9 +1,9 @@
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.database.AChannel;
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.dto.ChannelDto;
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 lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -12,8 +12,8 @@ import lombok.Setter;
@Setter
@Builder
public class AServerAChannelAUser {
private AServer guild;
private AChannel channel;
private AUserInAServer aUserInAServer;
private AUser user;
private ServerDto guild;
private ChannelDto channel;
private UserInServerDto aUserInAServer;
private UserDto user;
}

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -10,7 +10,7 @@ import lombok.Setter;
@Setter
@Builder
public class AServerAChannelMessage {
private AServer server;
private AChannel channel;
private ServerDto server;
private ChannelDto channel;
private Long messageId;
}

View File

@@ -1,5 +0,0 @@
package dev.sheldan.abstracto.core.models;
public interface SnowFlake {
Long getId();
}

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.models.cache;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -12,6 +12,6 @@ import java.util.List;
@Setter
@Builder
public class CachedReaction {
private AEmote emote;
private List<AUser> users;
private EmoteDto emote;
private List<UserDto> users;
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.models.context;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -15,6 +15,6 @@ import net.dv8tion.jda.api.entities.Guild;
@Setter
public class ServerContext {
private Guild guild;
private AServer server;
private ServerDto server;
}

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.models.context;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@@ -14,10 +14,10 @@ import net.dv8tion.jda.api.entities.MessageChannel;
@Setter
@SuperBuilder
public class UserInitiatedServerContext extends ServerContext {
private AChannel channel;
private ChannelDto channel;
private MessageChannel messageChannel;
private Member member;
private AUser user;
private AUserInAServer aUserInAServer;
private UserDto user;
private UserInServerDto aUserInAServer;
}

View File

@@ -1,50 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
import net.dv8tion.jda.api.entities.ChannelType;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name="channel")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AChannel implements SnowFlake {
@Id
@Getter
@Column(name = "id")
public Long id;
@Getter
@ManyToMany(mappedBy = "channels")
private List<AChannelGroup> groups;
@ManyToOne(fetch = FetchType.LAZY)
@Getter
@Setter
@JoinColumn(name = "server_id")
private AServer server;
@Getter
@Enumerated(EnumType.STRING)
private AChannelType type;
@Getter
@Setter
@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,39 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import javax.persistence.*;
import java.util.List;
import java.util.Set;
@Entity
@Table(name="channelGroup")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class AChannelGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
@Setter
private String groupName;
@ManyToOne(fetch = FetchType.LAZY)
@Getter
@Setter
@JoinColumn(name = "group_server")
private AServer server;
@ManyToMany
@JoinTable(
name = "channel_in_group",
joinColumns = @JoinColumn(name = "group_id"),
inverseJoinColumns = @JoinColumn(name = "channel_id"))
private List<AChannel> channels;
}

View File

@@ -1,33 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import lombok.*;
import javax.persistence.*;
@Entity
@Table(name = "channel_group_command")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class AChannelGroupCommand {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long commandInGroupId;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "command_id", nullable = false)
@Setter
private ACommand command;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "group_id", nullable = false)
@Setter
private AChannelGroup group;
@Setter
private Boolean enabled;
}

View File

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

View File

@@ -1,35 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import javax.persistence.*;
@Entity
@Table(name="systemConfig")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class AConfig {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer Id;
@Column
private String name;
@Column
@Setter
private String stringValue;
@Column
@Setter
private Double doubleValue;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "server_id", nullable = false)
@Getter
@Setter
private AServer server;
}

View File

@@ -1,42 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import javax.persistence.*;
@Entity
@Table(name = "emote")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class AEmote {
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer Id;
@Column
private String name;
@Column
@Setter
private String emoteKey;
@Column
@Setter
private Long emoteId;
@Column
@Setter
private Boolean animated;
@Column
@Setter
private Boolean custom;
@ManyToOne(fetch = FetchType.LAZY)
private AServer serverRef;
}

View File

@@ -1,34 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
import javax.persistence.*;
@Entity
@Table(name="feature_flag")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AFeatureFlag implements SnowFlake {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter
@Column(name = "id")
public Long id;
@ManyToOne(fetch = FetchType.LAZY)
@Getter
@Setter
@JoinColumn(name = "server_id")
private AServer server;
@Getter
@Setter
private String key;
@Getter
@Setter
private boolean enabled;
}

View File

@@ -1,26 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="role")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ARole implements SnowFlake {
@Id
@Getter @Setter
private Long id;
@Column(unique = true)
@Getter @Setter
private String name;
}

View File

@@ -1,60 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "server")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class AServer implements SnowFlake {
@Id
@Column(name = "id")
private Long id;
private String name;
@OneToMany(fetch = FetchType.LAZY)
@Builder.Default
private List<ARole> roles = new ArrayList<>();
@OneToMany(
fetch = FetchType.LAZY,
cascade = CascadeType.ALL,
orphanRemoval = true)
@Builder.Default
@JoinColumn(name = "server_id")
private List<AChannel> channels = new ArrayList<>();
@OneToMany(
fetch = FetchType.LAZY,
cascade = CascadeType.ALL,
orphanRemoval = true)
@Builder.Default
@JoinColumn(name = "group_server")
private List<AChannelGroup> channelGroups = new ArrayList<>();
@OneToMany(
fetch = FetchType.LAZY,
mappedBy = "serverReference",
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@Builder.Default
private List<AUserInAServer> users = new ArrayList<>();
@OneToMany(
fetch = FetchType.LAZY,
mappedBy = "serverRef",
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@Builder.Default
private List<AEmote> emotes = new ArrayList<>();
}

View File

@@ -1,24 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name="users")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class AUser {
@Id
private Long id;
@OneToMany(
fetch = FetchType.LAZY,
mappedBy = "userReference",
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private List<AUserInAServer> servers;
}

View File

@@ -1,26 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import javax.persistence.*;
@Entity
@Getter
@Builder
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class AUserInAServer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userInServerId;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "userReference")
private AUser userReference;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "serverReference")
private AServer serverReference;
}

View File

@@ -1,34 +0,0 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import javax.persistence.*;
import java.util.Arrays;
import java.util.List;
@Entity
@Table(name="posttarget")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PostTarget {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter
private Long id;
@Getter
private String name;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "channel_id", nullable = false)
@Getter @Setter
private AChannel channelReference;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="server_id", nullable = false)
@Getter @Setter
private AServer serverReference;
}

View File

@@ -0,0 +1,12 @@
package dev.sheldan.abstracto.core.models.template;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class ChannelModel {
private Long id;
}

View File

@@ -0,0 +1,19 @@
package dev.sheldan.abstracto.core.models.template;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Guild;
@Getter
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@Setter
public class ServerContextModel {
private ServerModel server;
}

View File

@@ -0,0 +1,13 @@
package dev.sheldan.abstracto.core.models.template;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class ServerModel {
private Long id;
private String name;
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.models.template;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class UserInServerModel {
private Long userInServerId;
private UserModel user;
private ServerModel server;
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.core.models.template;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
@Getter @NoArgsConstructor
@Setter
@SuperBuilder
public class UserInitiatedServerContextModel extends ServerContextModel {
private ChannelModel channel;
private UserModel userModel;
private UserInServerModel userInServer;
}

View File

@@ -0,0 +1,12 @@
package dev.sheldan.abstracto.core.models.template;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class UserModel {
private Long id;
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.models.template.commands;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -10,6 +10,6 @@ import net.dv8tion.jda.api.entities.TextChannel;
@Setter
@Builder
public class ChannelGroupChannelModel {
private AChannel channel;
private ChannelDto channel;
private TextChannel discordChannel;
}

View File

@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.core.models.template.listener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.template.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
@@ -11,9 +12,10 @@ import net.dv8tion.jda.api.entities.TextChannel;
@Getter
@Setter
@SuperBuilder
public class MessageEmbeddedModel extends UserInitiatedServerContext {
public class MessageEmbeddedModel extends UserInitiatedServerContextModel {
private CachedMessage embeddedMessage;
private Member author;
private TextChannel sourceChannel;
private Member embeddingUser;
private ChannelModel sourceChannel;
private ServerModel sourceServer;
private UserModel embeddedUser;
private UserInServerModel embeddedUserInServer;
}

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import dev.sheldan.abstracto.core.models.GuildChannelMember;
import dev.sheldan.abstracto.core.models.database.AEmote;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.Guild;
@@ -20,7 +20,7 @@ public interface Bot {
GuildChannelMember getServerChannelUser(Long serverId, Long channelId, Long userId);
Member getMemberInServer(Long serverId, Long memberId);
CompletableFuture<Void> deleteMessage(Long serverId, Long channelId, Long messageId);
Optional<Emote> getEmote(Long serverId, AEmote emote);
Optional<Emote> getEmote(Long serverId, EmoteDto emote);
Optional<TextChannel> getTextChannelFromServer(Guild serverId, Long textChannelId);
Optional<TextChannel> getTextChannelFromServer(Long serverId, Long textChannelId);
Optional<Guild> getGuildById(Long serverId);

View File

@@ -1,19 +1,23 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
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 net.dv8tion.jda.api.entities.TextChannel;
import java.util.List;
public interface ChannelGroupService {
AChannelGroup createChannelGroup(String name, Long serverId);
ChannelGroupDto createChannelGroup(String name, Long serverId);
void deleteChannelGroup(String name, Long serverId);
void addChannelToChannelGroup(String channelGroupName, TextChannel textChannel);
void addChannelToChannelGroup(String channelGroupName, Long channelId);
void addChannelToChannelGroup(String channelGroupName, AChannel channel);
void addChannelToChannelGroup(String channelGroupName, ChannelDto channel);
void removeChannelFromChannelGroup(String channelGroupName, TextChannel textChannel);
void removeChannelFromChannelGroup(String channelGroupName, Long channelId);
void removeChannelFromChannelGroup(String channelGroupName, AChannel channel);
void removeChannelFromChannelGroup(String channelGroupName, ChannelDto channel);
void disableCommandInChannelGroup(String commandName, String channelGroupName, Long serverId);
void enableCommandInChannelGroup(String commandName, String channelGroupName, Long serverId);
boolean doesGroupExist(String groupName, Long serverId);
List<ChannelGroupDto> findAllInServer(ServerDto server);
}

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.models.database.AChannel;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
@@ -10,8 +10,9 @@ import java.util.Optional;
import java.util.concurrent.CompletableFuture;
public interface ChannelService {
void sendTextInAChannel(String text, AChannel channel);
List<CompletableFuture<Message>> sendMessageToEndInAChannel(MessageToSend messageToSend, AChannel channel);
void sendTextInAChannel(String text, ChannelDto channel);
List<CompletableFuture<Message>> sendMessageToEndInAChannel(MessageToSend messageToSend, ChannelDto channel);
List<CompletableFuture<Message>> sendMessageToEndInTextChannel(MessageToSend messageToSend, TextChannel textChannel);
Optional<TextChannel> getTextChannelInGuild(Long serverId, Long channelId);
ChannelDto loadChannel(Long channelId);
}

View File

@@ -3,5 +3,6 @@ package dev.sheldan.abstracto.core.service;
public interface ConfigService {
Double getDoubleValue(String name, Long serverId);
Double getDoubleValue(String name, Long serverId, Double defaultValue);
void createValueIfNotExists(String name, Long serverId, Double value);
}

View File

@@ -1,13 +1,16 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.MessageReaction;
import java.util.Optional;
public interface EmoteService {
boolean isEmoteUsableByBot(Emote emote);
AEmote buildAEmoteFromReaction(MessageReaction.ReactionEmote reaction);
String getEmoteAsMention(AEmote emote, Long serverId, String defaultText) ;
String getEmoteAsMention(AEmote emote, Long serverId) ;
EmoteDto buildAEmoteFromReaction(MessageReaction.ReactionEmote reaction);
Optional<EmoteDto> getEmoteByName(String name, Long serverId);
String getEmoteAsMention(EmoteDto emote, Long serverId, String defaultText) ;
String getEmoteAsMention(EmoteDto emote, Long serverId) ;
void throwIfEmoteDoesNotExist(String emoteKey, Long serverId) ;
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.core.models.dto.PostTargetDto;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -9,17 +9,18 @@ import java.util.List;
import java.util.concurrent.CompletableFuture;
public interface PostTargetService {
CompletableFuture<Message> sendTextInPostTarget(String text, PostTarget target);
CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, PostTarget target);
CompletableFuture<Message> sendTextInPostTarget(String text, PostTargetDto target);
CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, PostTargetDto target);
CompletableFuture<Message> sendTextInPostTarget(String text, String postTargetName, Long serverId);
CompletableFuture<Message> sendEmbedInPostTarget(MessageEmbed embed, String postTargetName, Long serverId);
List<CompletableFuture<Message>> sendEmbedInPostTarget(MessageToSend message, String postTargetName, Long serverId);
List<CompletableFuture<Message>> sendEmbedInPostTarget(MessageToSend message, PostTarget target);
List<CompletableFuture<Message>> editEmbedInPostTarget(Long messageId, MessageToSend message, PostTarget target);
List<CompletableFuture<Message>> sendEmbedInPostTarget(MessageToSend message, PostTargetDto target);
List<CompletableFuture<Message>> editEmbedInPostTarget(Long messageId, MessageToSend message, PostTargetDto target);
List<CompletableFuture<Message>> editEmbedInPostTarget(Long messageId, MessageToSend message, String postTargetName, Long serverId);
void editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, PostTarget target, List<CompletableFuture<Message>> future);
void editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, PostTargetDto target, List<CompletableFuture<Message>> future);
void editOrCreatedInPostTarget(Long messageId, MessageToSend messageToSend, String postTarget, Long serverId, List<CompletableFuture<Message>> future);
void throwIfPostTargetIsNotDefined(String name, Long serverId);
boolean validPostTarget(String name);
List<String> getAvailablePostTargets();
PostTargetDto getPostTarget(String name, Long serverId);
}

View File

@@ -1,17 +0,0 @@
package dev.sheldan.abstracto.core.service.management;
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 java.util.List;
public interface ChannelGroupManagementService {
AChannelGroup createChannelGroup(String name, AServer server);
void deleteChannelGroup(String name, AServer server);
AChannelGroup addChannelToChannelGroup(AChannelGroup channelGroup, AChannel channel);
void removeChannelFromChannelGroup(AChannelGroup channelGroup, AChannel channel);
AChannelGroup findByNameAndServer(String name, AServer server);
List<AChannelGroup> findAllInServer(AServer server);
List<AChannelGroup> findAllInServer(Long serverId);
}

View File

@@ -1,11 +0,0 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AChannelType;
public interface ChannelManagementService {
AChannel loadChannel(Long id);
AChannel createChannel(Long id, AChannelType type);
void markAsDeleted(Long id);
void removeChannel(Long id);
}

View File

@@ -1,13 +0,0 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.AConfig;
public interface ConfigManagementService {
void setOrCreateStringValue(Long serverId, String name, String value);
void setOrCreateDoubleValue(Long serverId, String name, Double value);
AConfig createConfig(Long serverId, String name, String value);
AConfig createConfig(Long serverId, String name, Double value);
AConfig createIfNotExists(Long serverId, String name, String value);
AConfig createIfNotExists(Long serverId, String name, Double value);
AConfig loadConfig(Long serverId, String name);
}

View File

@@ -1,26 +0,0 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.exception.ConfigurationException;
import dev.sheldan.abstracto.core.exception.EmoteException;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.AServer;
import net.dv8tion.jda.api.entities.Emote;
import java.util.Optional;
public interface EmoteManagementService {
AEmote loadEmote(Long id);
AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated, Long serverId) ;
AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated, AServer server) ;
AEmote createDefaultEmote(String name, String emoteKey, Long serverId) ;
AEmote createDefaultEmote(String name, String emoteKey, AServer server) ;
Optional<AEmote> loadEmoteByName(String name, Long serverId);
Optional<AEmote> loadEmoteByName(String name, AServer server);
AEmote setEmoteToCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated, Long serverId) ;
AEmote setEmoteToCustomEmote(String name, Emote emote, Long serverId) ;
AEmote setEmoteToDefaultEmote(String name, String emoteKey, Long serverId) ;
boolean emoteExists(String name, Long serverId);
boolean emoteExists(String name, AServer server);
AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated);
AEmote createDefaultEmote(String name, String emoteKey);
}

View File

@@ -1,14 +0,0 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import dev.sheldan.abstracto.core.models.database.AServer;
import java.util.Optional;
public interface FeatureFlagManagementService {
void createFeatureFlag(String key, Long serverId, Boolean newValue);
void createFeatureFlag(String key, AServer server, Boolean newValue);
boolean getFeatureFlagValue(String key, Long serverId);
void updateOrCreateFeatureFlag(String key, Long serverId, Boolean newValue);
Optional<AFeatureFlag> getFeatureFlag(String key, Long serverId);
}

View File

@@ -1,17 +0,0 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.exception.ConfigurationException;
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;
public interface PostTargetManagement {
void createPostTarget(String name, AServer server, AChannel targetChanel);
void createOrUpdate(String name, AServer server, AChannel targetChannel);
void createOrUpdate(String name, AServer server, Long channelId);
void createOrUpdate(String name, Long serverId, Long channelId);
PostTarget getPostTarget(String name, AServer server);
PostTarget getPostTarget(String name, Long serverId);
void updatePostTarget(PostTarget target, AServer server, AChannel newTargetChannel);
}

View File

@@ -1,7 +0,0 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.ARole;
public interface RoleManagementService {
ARole createRole(Long id);
}

View File

@@ -1,18 +0,0 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.*;
import java.util.List;
public interface ServerManagementService {
AServer createServer(Long id);
AServer loadOrCreate(Long id);
void addChannelToServer(AServer server, AChannel channel);
AUserInAServer addUserToServer(AServer server, AUser user);
AUserInAServer addUserToServer(Long serverId, Long userId);
AChannel getPostTarget(Long serverId, String name);
AChannel getPostTarget(Long serverId, PostTarget target);
AChannel getPostTarget(AServer server, PostTarget target);
AChannel getPostTarget(AServer server, String name);
List<AServer> getAllServers();
}

View File

@@ -1,17 +0,0 @@
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 net.dv8tion.jda.api.entities.Member;
public interface UserManagementService {
AUserInAServer loadUser(Long serverId, Long userId);
AUserInAServer loadUser(AServer server, AUser user);
AUserInAServer loadUser(Member member);
AUserInAServer createUserInServer(Member member);
AUserInAServer createUserInServer(Long guildId, Long userId);
AUser createUser(Member member);
AUser createUser(Long userId);
AUser loadUser(Long userId);
}

View File

@@ -0,0 +1,11 @@
package dev.sheldan.abstracto.core.utils;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class AbstractoDateUtils {
public static OffsetDateTime convertInstant(Instant instant) {
return instant.atOffset(ZoneOffset.UTC);
}
}

View File

@@ -1,14 +1,13 @@
package dev.sheldan.abstracto.core.utils;
import dev.sheldan.abstracto.core.command.service.UserService;
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.dto.UserInServerDto;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.GuildChannelMember;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.ChannelService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -21,10 +20,10 @@ import java.lang.reflect.Method;
public class ContextUtils {
@Autowired
private ChannelManagementService channelManagementService;
private ChannelService channelService;
@Autowired
private UserManagementService userManagementService;
private UserService userService;
@Autowired
private Bot bot;
@@ -35,15 +34,15 @@ public class ContextUtils {
try {
m = clazz.getMethod("builder");
UserInitiatedServerContext.UserInitiatedServerContextBuilder<?, ?> builder = (UserInitiatedServerContext.UserInitiatedServerContextBuilder) m.invoke(null, null);
AUserInAServer aUserInAServer = userManagementService.loadUser(message.getServerId(), message.getAuthorId());
UserInServerDto aUserInAServer = userService.loadUser(message.getServerId(), message.getAuthorId());
return builder
.member(guildChannelMember.getMember())
.guild(guildChannelMember.getGuild())
.messageChannel(guildChannelMember.getTextChannel())
.channel(channelManagementService.loadChannel(message.getChannelId()))
.server(aUserInAServer.getServerReference())
.channel(channelService.loadChannel(message.getChannelId()))
.server(aUserInAServer.getServer())
.aUserInAServer(aUserInAServer)
.user(aUserInAServer.getUserReference())
.user(aUserInAServer.getUser())
.build();
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
log.error("Failed to execute builder method", e);

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.utils;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
import dev.sheldan.abstracto.core.models.database.AEmote;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.MessageReaction;
@@ -10,7 +10,7 @@ import java.util.Optional;
public class EmoteUtils {
public static boolean isReactionEmoteAEmote(MessageReaction.ReactionEmote reaction, AEmote emote, Emote emoteInGuild) {
public static boolean isReactionEmoteAEmote(MessageReaction.ReactionEmote reaction, EmoteDto emote, Emote emoteInGuild) {
if(reaction.isEmote() && emote.getCustom()) {
if(emoteInGuild != null) {
return emoteInGuild.equals(reaction.getEmote());
@@ -22,11 +22,11 @@ public class EmoteUtils {
}
}
public static Optional<CachedReaction> getReactionFromMessageByEmote(CachedMessage message, AEmote emote) {
public static Optional<CachedReaction> getReactionFromMessageByEmote(CachedMessage message, EmoteDto emote) {
return message.getReactions().stream().filter(reaction -> compareAEmote(reaction.getEmote(), emote)).findFirst();
}
public static boolean compareAEmote(AEmote a, AEmote b) {
public static boolean compareAEmote(EmoteDto a, EmoteDto b) {
if(a.getCustom() && b.getCustom()) {
return a.getEmoteId().equals(b.getEmoteId());
} else {

View File

@@ -1,67 +0,0 @@
package dev.sheldan.abstracto.core.utils;
import dev.sheldan.abstracto.core.models.GuildChannelMember;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AChannel;
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.template.commands.PingModel;
import dev.sheldan.abstracto.core.service.Bot;
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 org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class ContextUtilsTest {
public static final Long CHANNEL_ID = 1L;
public static final Long SERVER_ID = 1L;
public static final Long AUTHOR_ID = 1L;
@InjectMocks
private ContextUtils classToTest;
@Mock
private ChannelManagementService channelManagementService;
@Mock
private UserManagementService userManagementService;
@Mock
private Bot bot;
@Before
public void setup() {
GuildChannelMember build = GuildChannelMember.builder().build();
when(bot.getServerChannelUser(eq(SERVER_ID), eq(CHANNEL_ID), eq(AUTHOR_ID))).thenReturn(build);
AServer server = AServer.builder().id(SERVER_ID).build();
AUserInAServer aUserInAServer = AUserInAServer.builder().userReference(AUser.builder().id(AUTHOR_ID).build()).serverReference(server).build();
when(userManagementService.loadUser(eq(SERVER_ID), eq(AUTHOR_ID))).thenReturn(aUserInAServer);
AChannel channel = AChannel.builder().id(CHANNEL_ID).build();
when(channelManagementService.loadChannel(eq(CHANNEL_ID))).thenReturn(channel);
}
@Test
public void testFromMessage() {
PingModel pingModel = (PingModel) classToTest.fromMessage(buildCachedMessage(), PingModel.class);
assertEquals(pingModel.getUser().getId(), AUTHOR_ID);
assertEquals(pingModel.getAUserInAServer().getUserReference().getId(), AUTHOR_ID);
assertEquals(pingModel.getAUserInAServer().getServerReference().getId(), SERVER_ID);
assertEquals(pingModel.getServer().getId(), SERVER_ID);
assertEquals(pingModel.getChannel().getId(), CHANNEL_ID);
}
private CachedMessage buildCachedMessage() {
return CachedMessage.builder().authorId(AUTHOR_ID).serverId(SERVER_ID).channelId(CHANNEL_ID).build();
}
}