mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-13 03:26:31 +00:00
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:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package dev.sheldan.abstracto.core.utils;
|
||||
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user