introduced eh-cache as a caching provider instead of caffeine to be used in hibernate (only ram cache is currently possible)

added caching configuration for 2nd level caching in hibernate
added command to clear hibernate caches
changed some interfaces so the api looks a bit more consistent (return the created/updated value)
split user management and user in server management
added try catch block to message received listener execution, to make them independent
moved some feature flag methods to the feature flag service bean instead of the management service, as they used the FeatureEnum directly
fixed feature disable text always rendering
removed some non embed logging
fixed message embed template
added exception logging to message embedding
This commit is contained in:
Sheldan
2020-05-01 22:42:12 +02:00
parent 59dc8c602a
commit f2ce402256
117 changed files with 1125 additions and 288 deletions

View File

@@ -5,7 +5,6 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.models.FeatureDisabledMessage;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
import dev.sheldan.abstracto.templating.service.TemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -13,9 +12,6 @@ import org.springframework.stereotype.Component;
@Component
public class FeatureEnabledCondition implements CommandCondition {
@Autowired
private FeatureFlagManagementService featureFlagManagementService;
@Autowired
private TemplateService templateService;
@@ -28,12 +24,14 @@ public class FeatureEnabledCondition implements CommandCondition {
boolean featureFlagValue = true;
String reason = "";
if(feature != null) {
featureFlagValue = featureFlagManagementService.getFeatureFlagValue(feature, context.getGuild().getIdLong());
FeatureDisabledMessage featureDisabledMessage = FeatureDisabledMessage
.builder()
.featureConfig(featureFlagService.getFeatureDisplayForFeature(feature))
.build();
reason = templateService.renderTemplate("feature_disabled_message", featureDisabledMessage);
featureFlagValue = featureFlagService.getFeatureFlagValue(feature, context.getGuild().getIdLong());
if(!featureFlagValue) {
FeatureDisabledMessage featureDisabledMessage = FeatureDisabledMessage
.builder()
.featureConfig(featureFlagService.getFeatureDisplayForFeature(feature))
.build();
reason = templateService.renderTemplate("feature_disabled_message", featureDisabledMessage);
}
}
return ConditionResult.builder().reason(reason).result(featureFlagValue).build();
}

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.templating.Templatable;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.templating.Templatable;
public class CommandNotFound extends AbstractoRunTimeException implements Templatable {

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.templating.Templatable;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import java.util.HashMap;

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.command.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.templating.Templatable;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import java.util.HashMap;

View File

@@ -2,8 +2,10 @@ package dev.sheldan.abstracto.core.command.models.database;
import dev.sheldan.abstracto.core.models.database.AFeature;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name = "command")
@@ -11,6 +13,8 @@ import javax.persistence.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class ACommand {
@Id
@Column(name = "id")
@@ -31,4 +35,19 @@ public class ACommand {
@JoinColumn(name = "feature_id", nullable = false)
private AFeature feature;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ACommand aCommand = (ACommand) o;
return Objects.equals(id, aCommand.id) &&
Objects.equals(name, aCommand.name) &&
Objects.equals(module, aCommand.module) &&
Objects.equals(feature, aCommand.feature);
}
@Override
public int hashCode() {
return Objects.hash(id, name, module, feature);
}
}

View File

@@ -3,9 +3,11 @@ package dev.sheldan.abstracto.core.command.models.database;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.database.AServer;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.List;
import java.util.Objects;
@Entity
@Getter
@@ -13,6 +15,8 @@ import java.util.List;
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class ACommandInAServer {
@Id
@@ -30,11 +34,13 @@ public class ACommandInAServer {
@ManyToMany(fetch = FetchType.LAZY)
@Getter
@JoinColumn(name = "allowed_role_id")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<ARole> allowedRoles;
@ManyToMany(fetch = FetchType.LAZY)
@Getter
@JoinColumn(name = "immune_role_id")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<ARole> immuneRoles;
@Getter
@@ -42,7 +48,23 @@ public class ACommandInAServer {
@Column
private Boolean restricted;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ACommandInAServer that = (ACommandInAServer) o;
return Objects.equals(commandInServerId, that.commandInServerId) &&
Objects.equals(commandReference, that.commandReference) &&
Objects.equals(serverReference, that.serverReference) &&
Objects.equals(allowedRoles, that.allowedRoles) &&
Objects.equals(immuneRoles, that.immuneRoles) &&
Objects.equals(restricted, that.restricted);
}
@Override
public int hashCode() {
return Objects.hash(commandInServerId, commandReference, serverReference, allowedRoles, immuneRoles, restricted);
}
}

View File

@@ -4,10 +4,12 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Entity
@Table(name = "module")
@@ -15,6 +17,8 @@ import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AModule {
@Id
@@ -30,5 +34,21 @@ public class AModule {
orphanRemoval = true)
@Builder.Default
@JoinColumn(name = "module_id")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<ACommand> commands = new ArrayList<>();
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AModule aModule = (AModule) o;
return Objects.equals(id, aModule.id) &&
Objects.equals(name, aModule.name) &&
Objects.equals(commands, aModule.commands);
}
@Override
public int hashCode() {
return Objects.hash(id, name, commands);
}
}

View File

@@ -5,13 +5,14 @@ import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.Instant;
import java.util.List;
@Getter
@Setter
@Builder
public class CachedMessage {
public class CachedMessage implements Serializable {
private Long serverId;
private Long channelId;
private Long messageId;

View File

@@ -3,15 +3,19 @@ package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
import net.dv8tion.jda.api.entities.ChannelType;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.List;
import java.util.Objects;
@Entity
@Table(name="channel")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AChannel implements SnowFlake {
@Id
@@ -21,6 +25,7 @@ public class AChannel implements SnowFlake {
@Getter
@ManyToMany(mappedBy = "channels")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AChannelGroup> groups;
@ManyToOne(fetch = FetchType.LAZY)
@@ -47,4 +52,21 @@ public class AChannel implements SnowFlake {
default: return AChannelType.UNKOWN;
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AChannel channel = (AChannel) o;
return Objects.equals(id, channel.id) &&
Objects.equals(groups, channel.groups) &&
Objects.equals(server, channel.server) &&
type == channel.type &&
Objects.equals(deleted, channel.deleted);
}
@Override
public int hashCode() {
return Objects.hash(id, groups, server, type, deleted);
}
}

View File

@@ -1,9 +1,11 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.List;
import java.util.Objects;
@Entity
@Table(name="channelGroup")
@@ -11,6 +13,8 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AChannelGroup {
@Id
@@ -32,7 +36,22 @@ public class AChannelGroup {
name = "channel_in_group",
joinColumns = @JoinColumn(name = "group_id"),
inverseJoinColumns = @JoinColumn(name = "channel_id"))
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AChannel> channels;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AChannelGroup that = (AChannelGroup) o;
return Objects.equals(id, that.id) &&
Objects.equals(groupName, that.groupName) &&
Objects.equals(server, that.server) &&
Objects.equals(channels, that.channels);
}
@Override
public int hashCode() {
return Objects.hash(id, groupName, server, channels);
}
}

View File

@@ -2,8 +2,10 @@ package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name = "channel_group_command")
@@ -11,6 +13,8 @@ import javax.persistence.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AChannelGroupCommand {
@Id
@@ -30,4 +34,19 @@ public class AChannelGroupCommand {
@Setter
private Boolean enabled;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AChannelGroupCommand that = (AChannelGroupCommand) o;
return Objects.equals(commandInGroupId, that.commandInGroupId) &&
Objects.equals(command, that.command) &&
Objects.equals(group, that.group) &&
Objects.equals(enabled, that.enabled);
}
@Override
public int hashCode() {
return Objects.hash(commandInGroupId, command, group, enabled);
}
}

View File

@@ -1,8 +1,10 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name="systemConfig")
@@ -10,6 +12,8 @@ import javax.persistence.*;
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AConfig {
@Id
@@ -32,4 +36,21 @@ public class AConfig {
@Getter
@Setter
private AServer server;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AConfig config = (AConfig) o;
return Objects.equals(Id, config.Id) &&
Objects.equals(name, config.name) &&
Objects.equals(stringValue, config.stringValue) &&
Objects.equals(doubleValue, config.doubleValue) &&
Objects.equals(server, config.server);
}
@Override
public int hashCode() {
return Objects.hash(Id, name, stringValue, doubleValue, server);
}
}

View File

@@ -1,8 +1,10 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name = "emote")
@@ -10,6 +12,8 @@ import javax.persistence.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AEmote {
@javax.persistence.Id
@@ -39,5 +43,22 @@ public class AEmote {
@JoinColumn(name = "emote_server_id", nullable = false)
private AServer serverRef;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AEmote emote = (AEmote) o;
return Objects.equals(Id, emote.Id) &&
Objects.equals(name, emote.name) &&
Objects.equals(emoteKey, emote.emoteKey) &&
Objects.equals(emoteId, emote.emoteId) &&
Objects.equals(animated, emote.animated) &&
Objects.equals(custom, emote.custom) &&
Objects.equals(serverRef, emote.serverRef);
}
@Override
public int hashCode() {
return Objects.hash(Id, name, emoteKey, emoteId, animated, custom, serverRef);
}
}

View File

@@ -3,15 +3,19 @@ package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.List;
import java.util.Objects;
@Entity
@Table(name="feature")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AFeature implements SnowFlake {
@Id
@@ -28,6 +32,21 @@ public class AFeature implements SnowFlake {
@Setter
@OneToMany
@JoinColumn(name = "feature_id")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<ACommand> commands;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AFeature feature = (AFeature) o;
return Objects.equals(id, feature.id) &&
Objects.equals(key, feature.key) &&
Objects.equals(commands, feature.commands);
}
@Override
public int hashCode() {
return Objects.hash(id, key, commands);
}
}

View File

@@ -1,14 +1,18 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name="feature_flag")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AFeatureFlag {
@Id
@@ -32,4 +36,20 @@ public class AFeatureFlag {
@Getter
@Setter
private boolean enabled;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AFeatureFlag that = (AFeatureFlag) o;
return enabled == that.enabled &&
Objects.equals(id, that.id) &&
Objects.equals(server, that.server) &&
Objects.equals(feature, that.feature);
}
@Override
public int hashCode() {
return Objects.hash(id, server, feature, enabled);
}
}

View File

@@ -2,15 +2,19 @@ package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Objects;
@Entity
@Table(name="role")
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class ARole implements SnowFlake, Serializable {
@Id
@@ -28,4 +32,18 @@ public class ARole implements SnowFlake, Serializable {
@Setter
private Boolean deleted;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ARole role = (ARole) o;
return Objects.equals(id, role.id) &&
Objects.equals(server, role.server) &&
Objects.equals(deleted, role.deleted);
}
@Override
public int hashCode() {
return Objects.hash(id, server, deleted);
}
}

View File

@@ -2,11 +2,13 @@ package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Entity
@Table(name = "server")
@@ -14,6 +16,8 @@ import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AServer implements SnowFlake, Serializable {
@Id
@@ -27,6 +31,7 @@ public class AServer implements SnowFlake, Serializable {
orphanRemoval = true)
@Builder.Default
@JoinColumn(name = "role_server_id")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<ARole> roles = new ArrayList<>();
@OneToMany(
@@ -35,6 +40,7 @@ public class AServer implements SnowFlake, Serializable {
orphanRemoval = true)
@Builder.Default
@JoinColumn(name = "server_id")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AChannel> channels = new ArrayList<>();
@OneToMany(
@@ -43,6 +49,7 @@ public class AServer implements SnowFlake, Serializable {
orphanRemoval = true)
@Builder.Default
@JoinColumn(name = "group_server")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AChannelGroup> channelGroups = new ArrayList<>();
@OneToMany(
@@ -51,6 +58,7 @@ public class AServer implements SnowFlake, Serializable {
orphanRemoval = true)
@JoinColumn(name = "serverReference")
@Builder.Default
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AUserInAServer> users = new ArrayList<>();
@OneToMany(
@@ -59,8 +67,26 @@ public class AServer implements SnowFlake, Serializable {
orphanRemoval = true)
@JoinColumn(name = "emote_server_id")
@Builder.Default
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AEmote> emotes = new ArrayList<>();
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AServer aServer = (AServer) o;
return Objects.equals(id, aServer.id) &&
Objects.equals(name, aServer.name) &&
Objects.equals(roles, aServer.roles) &&
Objects.equals(channels, aServer.channels) &&
Objects.equals(channelGroups, aServer.channelGroups) &&
Objects.equals(users, aServer.users) &&
Objects.equals(emotes, aServer.emotes);
}
@Override
public int hashCode() {
return Objects.hash(id, name, roles, channels, channelGroups, users, emotes);
}
}

View File

@@ -1,9 +1,11 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.List;
import java.util.Objects;
@Entity
@Table(name="users")
@@ -11,6 +13,8 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AUser {
@Id
@@ -19,5 +23,20 @@ public class AUser {
@OneToMany(
fetch = FetchType.LAZY,
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private List<AUserInAServer> servers;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AUser user = (AUser) o;
return Objects.equals(id, user.id) &&
Objects.equals(servers, user.servers);
}
@Override
public int hashCode() {
return Objects.hash(id, servers);
}
}

View File

@@ -1,9 +1,11 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Objects;
@Entity
@Getter
@@ -11,6 +13,8 @@ import java.io.Serializable;
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AUserInAServer implements Serializable {
@Id
@@ -24,4 +28,19 @@ public class AUserInAServer implements Serializable {
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "serverReference", nullable = false)
private AServer serverReference;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AUserInAServer that = (AUserInAServer) o;
return Objects.equals(userInServerId, that.userInServerId) &&
Objects.equals(userReference, that.userReference) &&
Objects.equals(serverReference, that.serverReference);
}
@Override
public int hashCode() {
return Objects.hash(userInServerId, userReference, serverReference);
}
}

View File

@@ -1,14 +1,18 @@
package dev.sheldan.abstracto.core.models.database;
import lombok.*;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name="posttarget")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class PostTarget {
@Id
@@ -29,4 +33,19 @@ public class PostTarget {
@Getter @Setter
private AServer serverReference;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PostTarget that = (PostTarget) o;
return Objects.equals(id, that.id) &&
Objects.equals(name, that.name) &&
Objects.equals(channelReference, that.channelReference) &&
Objects.equals(serverReference, that.serverReference);
}
@Override
public int hashCode() {
return Objects.hash(id, name, channelReference, serverReference);
}
}

View File

@@ -4,7 +4,6 @@ public interface ConfigService {
Double getDoubleValue(String name, Long serverId);
Double getDoubleValue(String name, Long serverId, Double defaultValue);
String getStringValue(String name, Long serverId, String defaultValue);
void createDoubleValueIfNotExist(String name, Long serverId, Double value);
void setDoubleValue(String name, Long serverId, Double value);
void setStringValue(String name, Long serverId, String value);

View File

@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import dev.sheldan.abstracto.core.models.database.AServer;
import java.util.List;
@@ -20,4 +21,8 @@ public interface FeatureFlagService {
boolean doesFeatureExist(FeatureConfig name);
List<String> getFeaturesAsList();
FeatureEnum getFeatureEnum(String key);
boolean getFeatureFlagValue(FeatureEnum key, Long serverId);
boolean getFeatureFlagValue(FeatureEnum key, AServer server);
AFeatureFlag updateFeatureFlag(FeatureEnum key, Long serverId, Boolean newValue);
AFeatureFlag updateFeatureFlag(FeatureEnum key, AServer server, Boolean newValue);
}

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
@@ -10,8 +11,8 @@ import java.util.List;
public interface RoleService {
void addRoleToUser(AUserInAServer aUserInAServer, ARole role);
void removeRoleFromUser(AUserInAServer aUserInAServer, ARole role);
void markDeleted(Role role);
void markDeleted(Long id);
void markDeleted(Role role, AServer server);
void markDeleted(Long id, AServer server);
Role getRoleFromGuild(ARole role);
List<Role> getRolesFromGuild(List<ARole> roles);
boolean memberHasRole(Member member, Role role);

View File

@@ -7,6 +7,6 @@ import dev.sheldan.abstracto.core.models.database.AServer;
public interface ChannelManagementService {
AChannel loadChannel(Long id);
AChannel createChannel(Long id, AChannelType type, AServer server);
void markAsDeleted(Long id);
AChannel markAsDeleted(Long id);
void removeChannel(Long id);
}

View File

@@ -3,14 +3,14 @@ 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 setOrCreateStringValue(Long serverId, String name, String value);
AConfig 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);
boolean configExists(Long serverId, String name);
void setDoubleValue(Long serverId, String name, Double value);
void setStringValue(Long serverId, String name, String value);
AConfig setDoubleValue(Long serverId, String name, Double value);
AConfig setStringValue(Long serverId, String name, String value);
}

View File

@@ -19,6 +19,4 @@ public interface EmoteManagementService {
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,21 +1,17 @@
package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.models.database.AFeature;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import dev.sheldan.abstracto.core.models.database.AServer;
import java.util.List;
import java.util.Optional;
public interface FeatureFlagManagementService {
void createFeatureFlag(AFeature feature, Long serverId, Boolean newValue);
void createFeatureFlag(AFeature feature, AServer server, Boolean newValue);
boolean getFeatureFlagValue(FeatureEnum key, Long serverId);
boolean getFeatureFlagValue(FeatureEnum key, AServer server);
void updateFeatureFlag(FeatureEnum key, Long serverId, Boolean newValue);
void updateFeatureFlag(FeatureEnum key, AServer server, Boolean newValue);
Optional<AFeatureFlag> getFeatureFlag(AFeature key, Long serverId);
Optional<AFeatureFlag> getFeatureFlag(AFeature key, AServer server);
AFeatureFlag createFeatureFlag(AFeature feature, Long serverId, Boolean newValue);
AFeatureFlag createFeatureFlag(AFeature feature, AServer server, Boolean newValue);
AFeatureFlag getFeatureFlag(AFeature key, Long serverId);
AFeatureFlag getFeatureFlag(AFeature key, AServer server);
List<AFeatureFlag> getFeatureFlagsOfServer(AServer server);
AFeatureFlag setFeatureFlagValue(AFeature feature, Long serverId, Boolean newValue);
AFeatureFlag setFeatureFlagValue(AFeature feature, AServer server, Boolean newValue);
}

View File

@@ -5,11 +5,11 @@ 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 createPostTarget(String name, AServer server, AChannel targetChanel);
PostTarget createOrUpdate(String name, AServer server, AChannel targetChannel);
PostTarget createOrUpdate(String name, AServer server, Long channelId);
PostTarget 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);
PostTarget updatePostTarget(PostTarget target, AServer server, AChannel newTargetChannel);
}

View File

@@ -5,6 +5,6 @@ import dev.sheldan.abstracto.core.models.database.AServer;
public interface RoleManagementService {
ARole createRole(Long id, AServer server);
ARole findRole(Long id);
ARole findRole(Long id, AServer server);
void markDeleted(ARole role);
}

View File

@@ -0,0 +1,14 @@
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 UserInServerManagementService {
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);
}

View File

@@ -1,17 +1,9 @@
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 loadUserInServer(Long userInServerId);
AUserInAServer createUserInServer(Member member);
AUserInAServer createUserInServer(Long guildId, Long userId);
AUser createUser(Member member);
AUser createUser(Long userId);
AUser loadUser(Long userId);

View File

@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.core.utils;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.GuildChannelMember;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
@@ -23,7 +23,7 @@ public class ContextUtils {
private ChannelManagementService channelManagementService;
@Autowired
private UserManagementService userManagementService;
private UserInServerManagementService userInServerManagementService;
@Autowired
private BotService botService;
@@ -34,7 +34,7 @@ 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());
AUserInAServer aUserInAServer = userInServerManagementService.loadUser(message.getServerId(), message.getAuthorId());
return builder
.member(guildChannelMember.getMember())
.guild(guildChannelMember.getGuild())

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.core.utils;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import java.time.Duration;

View File

@@ -9,7 +9,7 @@ import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.template.commands.PingModel;
import dev.sheldan.abstracto.core.service.BotService;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -34,7 +34,7 @@ public class ContextUtilsTest {
private ChannelManagementService channelManagementService;
@Mock
private UserManagementService userManagementService;
private UserInServerManagementService userInServerManagementService;
@Mock
private BotService botService;
@@ -45,7 +45,7 @@ public class ContextUtilsTest {
when(botService.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);
when(userInServerManagementService.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);
}