mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-28 23:41:32 +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:
@@ -39,7 +39,7 @@ public class SetExpRole extends AbstractConditionableCommand {
|
|||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
Integer level = (Integer) commandContext.getParameters().getParameters().get(0);
|
Integer level = (Integer) commandContext.getParameters().getParameters().get(0);
|
||||||
Long roleId = (Long) commandContext.getParameters().getParameters().get(1);
|
Long roleId = (Long) commandContext.getParameters().getParameters().get(1);
|
||||||
ARole role = roleManagementService.findRole(roleId);
|
ARole role = roleManagementService.findRole(roleId, commandContext.getUserInitiatedContext().getServer());
|
||||||
AServer server = commandContext.getUserInitiatedContext().getServer();
|
AServer server = commandContext.getUserInitiatedContext().getServer();
|
||||||
if(!roleService.isRoleInServer(role)) {
|
if(!roleService.isRoleInServer(role)) {
|
||||||
throw new RoleException("Role not found.");
|
throw new RoleException("Role not found.");
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.experience.config;
|
|||||||
import dev.sheldan.abstracto.core.listener.ServerConfigListener;
|
import dev.sheldan.abstracto.core.listener.ServerConfigListener;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.service.ConfigService;
|
import dev.sheldan.abstracto.core.service.ConfigService;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -19,13 +20,13 @@ public class ExperienceConfigListener implements ServerConfigListener {
|
|||||||
private ExperienceConfig experienceConfig;
|
private ExperienceConfig experienceConfig;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ConfigService service;
|
private ConfigManagementService service;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateServerConfig(AServer server) {
|
public void updateServerConfig(AServer server) {
|
||||||
log.info("Setting up experience configuration for server {}.", server.getId());
|
log.info("Setting up experience configuration for server {}.", server.getId());
|
||||||
service.createDoubleValueIfNotExist("minExp", server.getId(), experienceConfig.getMinExp().doubleValue());
|
service.createIfNotExists(server.getId(), "minExp", experienceConfig.getMinExp().doubleValue());
|
||||||
service.createDoubleValueIfNotExist("maxExp", server.getId(), experienceConfig.getMaxExp().doubleValue());
|
service.createIfNotExists(server.getId(), "maxExp", experienceConfig.getMaxExp().doubleValue());
|
||||||
service.createDoubleValueIfNotExist("expMultiplier", server.getId(), experienceConfig.getExpMultiplier().doubleValue());
|
service.createIfNotExists(server.getId(), "expMultiplier", experienceConfig.getExpMultiplier().doubleValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package dev.sheldan.abstracto.experience.listener;
|
|||||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||||
import dev.sheldan.abstracto.core.listener.MessageReceivedListener;
|
import dev.sheldan.abstracto.core.listener.MessageReceivedListener;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.experience.config.features.ExperienceFeature;
|
import dev.sheldan.abstracto.experience.config.features.ExperienceFeature;
|
||||||
import dev.sheldan.abstracto.experience.service.AUserExperienceService;
|
import dev.sheldan.abstracto.experience.service.AUserExperienceService;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
@@ -23,12 +23,12 @@ public class ExperienceTrackerListener implements MessageReceivedListener {
|
|||||||
private AUserExperienceService userExperienceService;
|
private AUserExperienceService userExperienceService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||||
public void execute(Message message) {
|
public void execute(Message message) {
|
||||||
AUserInAServer cause = userManagementService.loadUser(message.getMember());
|
AUserInAServer cause = userInServerManagementService.loadUser(message.getMember());
|
||||||
userExperienceService.addExperience(cause);
|
userExperienceService.addExperience(cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
|||||||
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
|
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
|
||||||
import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
|
import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -20,6 +22,7 @@ public interface ExperienceRoleRepository extends JpaRepository<AExperienceRole,
|
|||||||
* @param role The {@link ARole} to filter for
|
* @param role The {@link ARole} to filter for
|
||||||
* @return The {@link AExperienceRole} found or null if the query did not return any results
|
* @return The {@link AExperienceRole} found or null if the query did not return any results
|
||||||
*/
|
*/
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
AExperienceRole findByRoleServerAndRole(AServer server, ARole role);
|
AExperienceRole findByRoleServerAndRole(AServer server, ARole role);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,6 +32,7 @@ public interface ExperienceRoleRepository extends JpaRepository<AExperienceRole,
|
|||||||
* @param server The {@link AServer} to search for
|
* @param server The {@link AServer} to search for
|
||||||
* @return The list of {@link AExperienceRole} found by the given parameters
|
* @return The list of {@link AExperienceRole} found by the given parameters
|
||||||
*/
|
*/
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<AExperienceRole> findByLevelAndRoleServer(AExperienceLevel level, AServer server);
|
List<AExperienceRole> findByLevelAndRoleServer(AExperienceLevel level, AServer server);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,5 +40,6 @@ public interface ExperienceRoleRepository extends JpaRepository<AExperienceRole,
|
|||||||
* @param server The {@link AServer} to load the list of {@link AExperienceRole} for
|
* @param server The {@link AServer} to load the list of {@link AExperienceRole} for
|
||||||
* @return A list of {@link AExperienceRole} configured to be used on the given {@link AServer}
|
* @return A list of {@link AExperienceRole} configured to be used on the given {@link AServer}
|
||||||
*/
|
*/
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<AExperienceRole> findByRoleServer(AServer server);
|
List<AExperienceRole> findByRoleServer(AServer server);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,11 @@ import dev.sheldan.abstracto.experience.models.database.AUserExperience;
|
|||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -22,6 +24,7 @@ public interface UserExperienceRepository extends JpaRepository<AUserExperience
|
|||||||
* @param server The {@link AServer} to retriev ethe {@link AUserExperience} for
|
* @param server The {@link AServer} to retriev ethe {@link AUserExperience} for
|
||||||
* @return A complete list of {@link AUserExperience} of the given {@link AServer}
|
* @return A complete list of {@link AUserExperience} of the given {@link AServer}
|
||||||
*/
|
*/
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<AUserExperience> findByUser_ServerReference(AServer server);
|
List<AUserExperience> findByUser_ServerReference(AServer server);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -31,6 +34,7 @@ public interface UserExperienceRepository extends JpaRepository<AUserExperience
|
|||||||
* @return A list of {@link AUserExperience} of the given {@link AServer} ordered by the experience of the users, paginated by the given
|
* @return A list of {@link AUserExperience} of the given {@link AServer} ordered by the experience of the users, paginated by the given
|
||||||
* configuration
|
* configuration
|
||||||
*/
|
*/
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<AUserExperience> findTop10ByUser_ServerReferenceOrderByExperienceDesc(AServer server, Pageable pageable);
|
List<AUserExperience> findTop10ByUser_ServerReferenceOrderByExperienceDesc(AServer server, Pageable pageable);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
package dev.sheldan.abstracto.experience.models.database;
|
package dev.sheldan.abstracto.experience.models.database;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
|
import javax.persistence.Cacheable;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an existing level to reach and the total necessary experience needed to reach that level.
|
* Represents an existing level to reach and the total necessary experience needed to reach that level.
|
||||||
@@ -17,6 +20,8 @@ import java.io.Serializable;
|
|||||||
@Table(name = "experience_level")
|
@Table(name = "experience_level")
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AExperienceLevel implements Serializable {
|
public class AExperienceLevel implements Serializable {
|
||||||
/**
|
/**
|
||||||
* The unique level from 0 to as defined in the configuration. Will be created on startup.
|
* The unique level from 0 to as defined in the configuration. Will be created on startup.
|
||||||
@@ -27,4 +32,18 @@ public class AExperienceLevel implements Serializable {
|
|||||||
* The total amount of experience needed for this level.
|
* The total amount of experience needed for this level.
|
||||||
*/
|
*/
|
||||||
private Long experienceNeeded;
|
private Long experienceNeeded;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
AExperienceLevel that = (AExperienceLevel) o;
|
||||||
|
return Objects.equals(level, that.level) &&
|
||||||
|
Objects.equals(experienceNeeded, that.experienceNeeded);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(level, experienceNeeded);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ package dev.sheldan.abstracto.experience.models.database;
|
|||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a role which is given when the user reaches a certain level. These roles are configurable per server and
|
* Represents a role which is given when the user reaches a certain level. These roles are configurable per server and
|
||||||
@@ -20,6 +22,8 @@ import java.util.List;
|
|||||||
@Table(name = "experience_role")
|
@Table(name = "experience_role")
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AExperienceRole implements Serializable {
|
public class AExperienceRole implements Serializable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,5 +62,23 @@ public class AExperienceRole implements Serializable {
|
|||||||
@OneToMany(fetch = FetchType.LAZY)
|
@OneToMany(fetch = FetchType.LAZY)
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
@JoinColumn(name = "experience_role_id")
|
@JoinColumn(name = "experience_role_id")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<AUserExperience> users = new ArrayList<>();
|
private List<AUserExperience> users = new ArrayList<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
AExperienceRole that = (AExperienceRole) o;
|
||||||
|
return Objects.equals(id, that.id) &&
|
||||||
|
Objects.equals(level, that.level) &&
|
||||||
|
Objects.equals(roleServer, that.roleServer) &&
|
||||||
|
Objects.equals(role, that.role) &&
|
||||||
|
Objects.equals(users, that.users);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, level, roleServer, role, users);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,11 @@ package dev.sheldan.abstracto.experience.models.database;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -18,6 +20,8 @@ import java.io.Serializable;
|
|||||||
@Table(name = "user_experience")
|
@Table(name = "user_experience")
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AUserExperience implements Serializable {
|
public class AUserExperience implements Serializable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -53,4 +57,22 @@ public class AUserExperience implements Serializable {
|
|||||||
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
|
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
|
||||||
@JoinColumn(name = "experience_role_id")
|
@JoinColumn(name = "experience_role_id")
|
||||||
private AExperienceRole currentExperienceRole;
|
private AExperienceRole currentExperienceRole;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
AUserExperience that = (AUserExperience) o;
|
||||||
|
return Objects.equals(id, that.id) &&
|
||||||
|
Objects.equals(user, that.user) &&
|
||||||
|
Objects.equals(experience, that.experience) &&
|
||||||
|
Objects.equals(messageCount, that.messageCount) &&
|
||||||
|
Objects.equals(currentLevel, that.currentLevel) &&
|
||||||
|
Objects.equals(currentExperienceRole, that.currentExperienceRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, user, experience, messageCount, currentLevel, currentExperienceRole);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,8 +36,6 @@ public class MessageDeleteLogListener implements MessageDeletedListener {
|
|||||||
log.trace("Message {} in channel {} in guild {} was deleted.", messageFromCache.getMessageId(), messageFromCache.getChannelId(), messageFromCache.getServerId());
|
log.trace("Message {} in channel {} in guild {} was deleted.", messageFromCache.getMessageId(), messageFromCache.getChannelId(), messageFromCache.getServerId());
|
||||||
MessageDeletedLog logModel = (MessageDeletedLog) contextUtils.fromMessage(messageFromCache, MessageDeletedLog.class);
|
MessageDeletedLog logModel = (MessageDeletedLog) contextUtils.fromMessage(messageFromCache, MessageDeletedLog.class);
|
||||||
logModel.setMessage(messageFromCache);
|
logModel.setMessage(messageFromCache);
|
||||||
String simpleMessageUpdatedMessage = templateService.renderTemplate(MESSAGE_DELETED_TEMPLATE, logModel);
|
|
||||||
postTargetService.sendTextInPostTarget(simpleMessageUpdatedMessage, DELETE_LOG_TARGET, messageFromCache.getServerId());
|
|
||||||
MessageToSend message = templateService.renderEmbedTemplate(MESSAGE_DELETED_TEMPLATE, logModel);
|
MessageToSend message = templateService.renderEmbedTemplate(MESSAGE_DELETED_TEMPLATE, logModel);
|
||||||
postTargetService.sendEmbedInPostTarget(message, DELETE_LOG_TARGET, messageFromCache.getServerId());
|
postTargetService.sendEmbedInPostTarget(message, DELETE_LOG_TARGET, messageFromCache.getServerId());
|
||||||
for (int i = 0; i < messageFromCache.getAttachmentUrls().size(); i++) {
|
for (int i = 0; i < messageFromCache.getAttachmentUrls().size(); i++) {
|
||||||
|
|||||||
@@ -3,13 +3,20 @@ package dev.sheldan.abstracto.moderation.repository;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface MuteRepository extends JpaRepository<Mute, Long> {
|
public interface MuteRepository extends JpaRepository<Mute, Long> {
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
boolean existsByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer);
|
boolean existsByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
Mute findTopByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer);
|
Mute findTopByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<Mute> findAllByMutedUserAndMuteEndedFalseOrderByIdDesc(AUserInAServer aUserInAServer);
|
List<Mute> findAllByMutedUserAndMuteEndedFalseOrderByIdDesc(AUserInAServer aUserInAServer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,18 @@ package dev.sheldan.abstracto.moderation.repository;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.moderation.models.database.MuteRole;
|
import dev.sheldan.abstracto.moderation.models.database.MuteRole;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface MuteRoleRepository extends JpaRepository<MuteRole, Long> {
|
public interface MuteRoleRepository extends JpaRepository<MuteRole, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
MuteRole findByRoleServer(AServer server);
|
MuteRole findByRoleServer(AServer server);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<MuteRole> findAllByRoleServer(AServer server);
|
List<MuteRole> findAllByRoleServer(AServer server);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,15 @@ package dev.sheldan.abstracto.moderation.repository;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.moderation.models.database.Warning;
|
import dev.sheldan.abstracto.moderation.models.database.Warning;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface WarnRepository extends JpaRepository<Warning, Long> {
|
public interface WarnRepository extends JpaRepository<Warning, Long> {
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<Warning> findAllByWarnedUser_ServerReferenceAndDecayedFalseAndWarnDateLessThan(AServer server, Instant cutOffDate);
|
List<Warning> findAllByWarnedUser_ServerReferenceAndDecayedFalseAndWarnDateLessThan(AServer server, Instant cutOffDate);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.*;
|
import dev.sheldan.abstracto.core.service.*;
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
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.moderation.exception.MuteException;
|
import dev.sheldan.abstracto.moderation.exception.MuteException;
|
||||||
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
||||||
import dev.sheldan.abstracto.moderation.models.database.MuteRole;
|
import dev.sheldan.abstracto.moderation.models.database.MuteRole;
|
||||||
@@ -48,7 +48,7 @@ public class MuteServiceBean implements MuteService {
|
|||||||
private RoleService roleService;
|
private RoleService roleService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private SchedulerService schedulerService;
|
private SchedulerService schedulerService;
|
||||||
@@ -83,13 +83,13 @@ public class MuteServiceBean implements MuteService {
|
|||||||
public Mute muteMember(Member memberToMute, Member mutingMember, String reason, Instant unmuteDate, Message message) {
|
public Mute muteMember(Member memberToMute, Member mutingMember, String reason, Instant unmuteDate, Message message) {
|
||||||
FullUser mutedUser = FullUser
|
FullUser mutedUser = FullUser
|
||||||
.builder()
|
.builder()
|
||||||
.aUserInAServer(userManagementService.loadUser(memberToMute))
|
.aUserInAServer(userInServerManagementService.loadUser(memberToMute))
|
||||||
.member(memberToMute)
|
.member(memberToMute)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
FullUser mutingUser = FullUser
|
FullUser mutingUser = FullUser
|
||||||
.builder()
|
.builder()
|
||||||
.aUserInAServer(userManagementService.loadUser(mutingMember))
|
.aUserInAServer(userInServerManagementService.loadUser(mutingMember))
|
||||||
.member(mutingMember)
|
.member(mutingMember)
|
||||||
.build();
|
.build();
|
||||||
return muteUser(mutedUser, mutingUser, reason, unmuteDate, message);
|
return muteUser(mutedUser, mutingUser, reason, unmuteDate, message);
|
||||||
@@ -264,6 +264,6 @@ public class MuteServiceBean implements MuteService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void completelyUnmuteUser(Member member) {
|
public void completelyUnmuteUser(Member member) {
|
||||||
completelyUnmuteUser(userManagementService.loadUser(member));
|
completelyUnmuteUser(userInServerManagementService.loadUser(member));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import dev.sheldan.abstracto.moderation.models.template.commands.WarnLog;
|
|||||||
import dev.sheldan.abstracto.moderation.models.template.commands.WarnNotification;
|
import dev.sheldan.abstracto.moderation.models.template.commands.WarnNotification;
|
||||||
import dev.sheldan.abstracto.moderation.models.database.Warning;
|
import dev.sheldan.abstracto.moderation.models.database.Warning;
|
||||||
import dev.sheldan.abstracto.moderation.service.management.WarnManagementService;
|
import dev.sheldan.abstracto.moderation.service.management.WarnManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.BotService;
|
import dev.sheldan.abstracto.core.service.BotService;
|
||||||
import dev.sheldan.abstracto.core.service.PostTargetService;
|
import dev.sheldan.abstracto.core.service.PostTargetService;
|
||||||
@@ -35,7 +35,7 @@ public class WarnServiceBean implements WarnService {
|
|||||||
public static final String WARN_LOG_TARGET = "warnLog";
|
public static final String WARN_LOG_TARGET = "warnLog";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private WarnManagementService warnManagementService;
|
private WarnManagementService warnManagementService;
|
||||||
@@ -78,13 +78,13 @@ public class WarnServiceBean implements WarnService {
|
|||||||
public Warning warnUser(Member warnedMember, Member warningMember, String reason, TextChannel feedbackChannel) {
|
public Warning warnUser(Member warnedMember, Member warningMember, String reason, TextChannel feedbackChannel) {
|
||||||
FullUser warnedUser = FullUser
|
FullUser warnedUser = FullUser
|
||||||
.builder()
|
.builder()
|
||||||
.aUserInAServer(userManagementService.loadUser(warnedMember))
|
.aUserInAServer(userInServerManagementService.loadUser(warnedMember))
|
||||||
.member(warnedMember)
|
.member(warnedMember)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
FullUser warningUser = FullUser
|
FullUser warningUser = FullUser
|
||||||
.builder()
|
.builder()
|
||||||
.aUserInAServer(userManagementService.loadUser(warningMember))
|
.aUserInAServer(userInServerManagementService.loadUser(warningMember))
|
||||||
.member(warningMember)
|
.member(warningMember)
|
||||||
.build();
|
.build();
|
||||||
return warnUser(warnedUser, warningUser, reason, feedbackChannel);
|
return warnUser(warnedUser, warningUser, reason, feedbackChannel);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.moderation.service.management;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.AServerAChannelMessage;
|
import dev.sheldan.abstracto.core.models.AServerAChannelMessage;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
import dev.sheldan.abstracto.moderation.models.database.Mute;
|
||||||
import dev.sheldan.abstracto.moderation.repository.MuteRepository;
|
import dev.sheldan.abstracto.moderation.repository.MuteRepository;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -21,7 +21,7 @@ public class MuteManagementServiceBean implements MuteManagementService {
|
|||||||
private MuteRepository muteRepository;
|
private MuteRepository muteRepository;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mute createMute(AUserInAServer aUserInAServer, AUserInAServer mutingUser, String reason, Instant unmuteDate, AServerAChannelMessage origin) {
|
public Mute createMute(AUserInAServer aUserInAServer, AUserInAServer mutingUser, String reason, Instant unmuteDate, AServerAChannelMessage origin) {
|
||||||
@@ -66,7 +66,7 @@ public class MuteManagementServiceBean implements MuteManagementService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mute getAMuteOf(Member userInAServer) {
|
public Mute getAMuteOf(Member userInAServer) {
|
||||||
return getAMuteOf(userManagementService.loadUser(userInAServer));
|
return getAMuteOf(userInServerManagementService.loadUser(userInAServer));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import lombok.*;
|
|||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="mute")
|
@Table(name="mute")
|
||||||
@@ -50,5 +51,26 @@ public class Mute {
|
|||||||
|
|
||||||
private String triggerKey;
|
private String triggerKey;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
Mute mute = (Mute) o;
|
||||||
|
return Objects.equals(id, mute.id) &&
|
||||||
|
Objects.equals(mutedUser, mute.mutedUser) &&
|
||||||
|
Objects.equals(mutingUser, mute.mutingUser) &&
|
||||||
|
Objects.equals(reason, mute.reason) &&
|
||||||
|
Objects.equals(muteDate, mute.muteDate) &&
|
||||||
|
Objects.equals(muteTargetDate, mute.muteTargetDate) &&
|
||||||
|
Objects.equals(muteEnded, mute.muteEnded) &&
|
||||||
|
Objects.equals(messageId, mute.messageId) &&
|
||||||
|
Objects.equals(mutingServer, mute.mutingServer) &&
|
||||||
|
Objects.equals(mutingChannel, mute.mutingChannel) &&
|
||||||
|
Objects.equals(triggerKey, mute.triggerKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, mutedUser, mutingUser, reason, muteDate, muteTargetDate, muteEnded, messageId, mutingServer, mutingChannel, triggerKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
|||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a role to be used for muting users on a certain server
|
* Represents a role to be used for muting users on a certain server
|
||||||
@@ -40,4 +41,19 @@ public class MuteRole {
|
|||||||
@OneToOne(fetch = FetchType.LAZY)
|
@OneToOne(fetch = FetchType.LAZY)
|
||||||
@JoinColumn(name = "role_id", nullable = false)
|
@JoinColumn(name = "role_id", nullable = false)
|
||||||
private ARole role;
|
private ARole role;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
MuteRole muteRole = (MuteRole) o;
|
||||||
|
return Objects.equals(id, muteRole.id) &&
|
||||||
|
Objects.equals(roleServer, muteRole.roleServer) &&
|
||||||
|
Objects.equals(role, muteRole.role);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, roleServer, role);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import lombok.*;
|
|||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="warning")
|
@Table(name="warning")
|
||||||
@@ -42,5 +43,22 @@ public class Warning {
|
|||||||
@Setter
|
@Setter
|
||||||
private Instant decayDate;
|
private Instant decayDate;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
Warning warning = (Warning) o;
|
||||||
|
return Objects.equals(id, warning.id) &&
|
||||||
|
Objects.equals(warnedUser, warning.warnedUser) &&
|
||||||
|
Objects.equals(warningUser, warning.warningUser) &&
|
||||||
|
Objects.equals(reason, warning.reason) &&
|
||||||
|
Objects.equals(warnDate, warning.warnDate) &&
|
||||||
|
Objects.equals(decayed, warning.decayed) &&
|
||||||
|
Objects.equals(decayDate, warning.decayDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, warnedUser, warningUser, reason, warnDate, decayed, decayDate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import dev.sheldan.abstracto.core.listener.MessageReceivedListener;
|
|||||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.MessageCache;
|
import dev.sheldan.abstracto.core.service.MessageCache;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
|
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
|
||||||
import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
|
import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
|
||||||
import dev.sheldan.abstracto.utility.service.MessageEmbedService;
|
import dev.sheldan.abstracto.utility.service.MessageEmbedService;
|
||||||
@@ -25,10 +25,8 @@ public class MessageEmbedListener implements MessageReceivedListener {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MessageCache messageCache;
|
private MessageCache messageCache;
|
||||||
|
|
||||||
public static final String MESSAGE_EMBED_TEMPLATE = "message";
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MessageEmbedService messageEmbedService;
|
private MessageEmbedService messageEmbedService;
|
||||||
@@ -39,9 +37,13 @@ public class MessageEmbedListener implements MessageReceivedListener {
|
|||||||
List<MessageEmbedLink> links = messageEmbedService.getLinksInMessage(messageRaw);
|
List<MessageEmbedLink> links = messageEmbedService.getLinksInMessage(messageRaw);
|
||||||
for (MessageEmbedLink messageEmbedLink : links) {
|
for (MessageEmbedLink messageEmbedLink : links) {
|
||||||
messageRaw = messageRaw.replace(messageEmbedLink.getWholeUrl(), "");
|
messageRaw = messageRaw.replace(messageEmbedLink.getWholeUrl(), "");
|
||||||
AUserInAServer cause = userManagementService.loadUser(message.getMember());
|
AUserInAServer cause = userInServerManagementService.loadUser(message.getMember());
|
||||||
Consumer<CachedMessage> cachedMessageConsumer = cachedMessage -> messageEmbedService.embedLink(cachedMessage, message.getTextChannel(), cause, message);
|
Consumer<CachedMessage> cachedMessageConsumer = cachedMessage -> messageEmbedService.embedLink(cachedMessage, message.getTextChannel(), cause, message);
|
||||||
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId()).thenAccept(cachedMessageConsumer);
|
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId()).thenAccept(cachedMessageConsumer)
|
||||||
|
.exceptionally(throwable -> {
|
||||||
|
log.error("Error when embedding link.", throwable);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if(StringUtils.isBlank(messageRaw) && !links.isEmpty()) {
|
if(StringUtils.isBlank(messageRaw) && !links.isEmpty()) {
|
||||||
message.delete().queue();
|
message.delete().queue();
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
|||||||
import dev.sheldan.abstracto.core.service.BotService;
|
import dev.sheldan.abstracto.core.service.BotService;
|
||||||
import dev.sheldan.abstracto.core.service.EmoteService;
|
import dev.sheldan.abstracto.core.service.EmoteService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
|
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.utils.EmoteUtils;
|
import dev.sheldan.abstracto.core.utils.EmoteUtils;
|
||||||
import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
|
import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
|
||||||
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
|
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
|
||||||
@@ -51,7 +51,7 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
|
|||||||
private StarboardPostReactorManagementService starboardPostReactorManagementService;
|
private StarboardPostReactorManagementService starboardPostReactorManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private EmoteService emoteService;
|
private EmoteService emoteService;
|
||||||
@@ -81,7 +81,7 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
|
|||||||
if (userExceptAuthor.size() >= starMinimum) {
|
if (userExceptAuthor.size() >= starMinimum) {
|
||||||
log.info("Post reached starboard minimum. Message {} in channel {} in server {} will be starred/updated.",
|
log.info("Post reached starboard minimum. Message {} in channel {} in server {} will be starred/updated.",
|
||||||
message.getMessageId(), message.getChannelId(), message.getServerId());
|
message.getMessageId(), message.getChannelId(), message.getServerId());
|
||||||
AUserInAServer author = userManagementService.loadUser(message.getServerId(), message.getAuthorId());
|
AUserInAServer author = userInServerManagementService.loadUser(message.getServerId(), message.getAuthorId());
|
||||||
if(starboardPostOptional.isPresent()) {
|
if(starboardPostOptional.isPresent()) {
|
||||||
StarboardPost starboardPost = starboardPostOptional.get();
|
StarboardPost starboardPost = starboardPostOptional.get();
|
||||||
starboardPost.setIgnored(false);
|
starboardPost.setIgnored(false);
|
||||||
|
|||||||
@@ -2,7 +2,12 @@ package dev.sheldan.abstracto.utility.repository;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.utility.models.database.EmbeddedMessage;
|
import dev.sheldan.abstracto.utility.models.database.EmbeddedMessage;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
|
|
||||||
public interface EmbeddedMessageRepository extends JpaRepository<EmbeddedMessage, Long> {
|
public interface EmbeddedMessageRepository extends JpaRepository<EmbeddedMessage, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
EmbeddedMessage findByEmbeddingMessageId(Long messageId);
|
EmbeddedMessage findByEmbeddingMessageId(Long messageId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,15 @@ package dev.sheldan.abstracto.utility.repository;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.utility.models.database.Reminder;
|
import dev.sheldan.abstracto.utility.models.database.Reminder;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Repository
|
||||||
public interface ReminderRepository extends JpaRepository<Reminder, Long> {
|
public interface ReminderRepository extends JpaRepository<Reminder, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<Reminder> getByRemindedUserAndRemindedFalse(AUserInAServer aUserInAServer);
|
List<Reminder> getByRemindedUserAndRemindedFalse(AUserInAServer aUserInAServer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,11 +5,17 @@ import dev.sheldan.abstracto.utility.models.database.StarboardPost;
|
|||||||
import dev.sheldan.abstracto.utility.models.database.StarboardPostReaction;
|
import dev.sheldan.abstracto.utility.models.database.StarboardPostReaction;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface StarboardPostReactionRepository extends JpaRepository<StarboardPostReaction, Long> {
|
public interface StarboardPostReactionRepository extends JpaRepository<StarboardPostReaction, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
void deleteByReactorAndStarboardPost(AUser user, StarboardPost post);
|
void deleteByReactorAndStarboardPost(AUser user, StarboardPost post);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
void deleteByStarboardPost(StarboardPost post);
|
void deleteByStarboardPost(StarboardPost post);
|
||||||
|
|
||||||
@Query(value = "SELECT r.reactor_id as userId, COUNT(*) AS starCount \n" +
|
@Query(value = "SELECT r.reactor_id as userId, COUNT(*) AS starCount \n" +
|
||||||
|
|||||||
@@ -2,12 +2,22 @@ package dev.sheldan.abstracto.utility.repository;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
|
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Repository
|
||||||
public interface StarboardPostRepository extends JpaRepository<StarboardPost, Long> {
|
public interface StarboardPostRepository extends JpaRepository<StarboardPost, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
StarboardPost findByPostMessageId(Long messageId);
|
StarboardPost findByPostMessageId(Long messageId);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
StarboardPost findByStarboardMessageId(Long messageId);
|
StarboardPost findByStarboardMessageId(Long messageId);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<StarboardPost> findByStarboardChannelServerId(Long serverId);
|
List<StarboardPost> findByStarboardChannelServerId(Long serverId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package dev.sheldan.abstracto.utility.repository;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.utility.models.database.Suggestion;
|
import dev.sheldan.abstracto.utility.models.database.Suggestion;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
public interface SuggestionRepository extends JpaRepository<Suggestion, Long> {
|
public interface SuggestionRepository extends JpaRepository<Suggestion, Long> {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import dev.sheldan.abstracto.core.service.MessageCache;
|
|||||||
import dev.sheldan.abstracto.core.service.MessageService;
|
import dev.sheldan.abstracto.core.service.MessageService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.templating.service.TemplateService;
|
import dev.sheldan.abstracto.templating.service.TemplateService;
|
||||||
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
|
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
|
||||||
import dev.sheldan.abstracto.utility.service.management.MessageEmbedPostManagementService;
|
import dev.sheldan.abstracto.utility.service.management.MessageEmbedPostManagementService;
|
||||||
@@ -48,7 +48,7 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
|
|||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private BotService botService;
|
private BotService botService;
|
||||||
@@ -128,7 +128,7 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
|
|||||||
private MessageEmbeddedModel buildTemplateParameter(Message message, CachedMessage embeddedMessage) {
|
private MessageEmbeddedModel buildTemplateParameter(Message message, CachedMessage embeddedMessage) {
|
||||||
AChannel channel = channelManagementService.loadChannel(message.getChannel().getIdLong());
|
AChannel channel = channelManagementService.loadChannel(message.getChannel().getIdLong());
|
||||||
AServer server = serverManagementService.loadOrCreate(message.getGuild().getIdLong());
|
AServer server = serverManagementService.loadOrCreate(message.getGuild().getIdLong());
|
||||||
AUserInAServer user = userManagementService.loadUser(message.getMember());
|
AUserInAServer user = userInServerManagementService.loadUser(message.getMember());
|
||||||
Member author = botService.getMemberInServer(embeddedMessage.getServerId(), embeddedMessage.getAuthorId());
|
Member author = botService.getMemberInServer(embeddedMessage.getServerId(), embeddedMessage.getAuthorId());
|
||||||
Optional<TextChannel> textChannelFromServer = botService.getTextChannelFromServer(embeddedMessage.getServerId(), embeddedMessage.getChannelId());
|
Optional<TextChannel> textChannelFromServer = botService.getTextChannelFromServer(embeddedMessage.getServerId(), embeddedMessage.getChannelId());
|
||||||
TextChannel sourceChannel = null;
|
TextChannel sourceChannel = null;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.utility.models.database.EmbeddedMessage;
|
import dev.sheldan.abstracto.utility.models.database.EmbeddedMessage;
|
||||||
import dev.sheldan.abstracto.utility.repository.EmbeddedMessageRepository;
|
import dev.sheldan.abstracto.utility.repository.EmbeddedMessageRepository;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -23,7 +23,7 @@ public class MessageEmbedPostManagementServiceBean implements MessageEmbedPostMa
|
|||||||
private EmbeddedMessageRepository embeddedMessageRepository;
|
private EmbeddedMessageRepository embeddedMessageRepository;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -32,7 +32,7 @@ public class MessageEmbedPostManagementServiceBean implements MessageEmbedPostMa
|
|||||||
AChannel embeddedChannel = AChannel.builder().id(embeddedMessage.getChannelId()).build();
|
AChannel embeddedChannel = AChannel.builder().id(embeddedMessage.getChannelId()).build();
|
||||||
AServer embeddingServer = AServer.builder().id(messageContainingEmbed.getGuild().getIdLong()).build();
|
AServer embeddingServer = AServer.builder().id(messageContainingEmbed.getGuild().getIdLong()).build();
|
||||||
AChannel embeddingChannel = AChannel.builder().id(messageContainingEmbed.getTextChannel().getIdLong()).build();
|
AChannel embeddingChannel = AChannel.builder().id(messageContainingEmbed.getTextChannel().getIdLong()).build();
|
||||||
AUserInAServer embeddedAuthor = userManagementService.loadUser(embeddedMessage.getServerId(), embeddedMessage.getAuthorId());
|
AUserInAServer embeddedAuthor = userInServerManagementService.loadUser(embeddedMessage.getServerId(), embeddedMessage.getAuthorId());
|
||||||
EmbeddedMessage messageEmbedPost = EmbeddedMessage
|
EmbeddedMessage messageEmbedPost = EmbeddedMessage
|
||||||
.builder()
|
.builder()
|
||||||
.embeddedMessageId(embeddedMessage.getMessageId())
|
.embeddedMessageId(embeddedMessage.getMessageId())
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.utility.service.management;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
@@ -26,14 +26,14 @@ public class SuggestionManagementServiceBean implements SuggestionManagementServ
|
|||||||
private ChannelManagementService channelManagementService;
|
private ChannelManagementService channelManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Suggestion createSuggestion(Member suggester, String text) {
|
public Suggestion createSuggestion(Member suggester, String text) {
|
||||||
AUserInAServer user = userManagementService.loadUser(suggester);
|
AUserInAServer user = userInServerManagementService.loadUser(suggester);
|
||||||
return this.createSuggestion(user, text);
|
return this.createSuggestion(user, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ import dev.sheldan.abstracto.core.models.database.AChannel;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="embedded_message")
|
@Table(name="embedded_message")
|
||||||
@@ -14,6 +16,8 @@ import javax.persistence.*;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class EmbeddedMessage {
|
public class EmbeddedMessage {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@@ -52,4 +56,24 @@ public class EmbeddedMessage {
|
|||||||
@Column
|
@Column
|
||||||
@Id
|
@Id
|
||||||
private Long embeddingMessageId;
|
private Long embeddingMessageId;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
EmbeddedMessage that = (EmbeddedMessage) o;
|
||||||
|
return Objects.equals(embeddedUser, that.embeddedUser) &&
|
||||||
|
Objects.equals(embeddingUser, that.embeddingUser) &&
|
||||||
|
Objects.equals(embeddedServer, that.embeddedServer) &&
|
||||||
|
Objects.equals(embeddedChannel, that.embeddedChannel) &&
|
||||||
|
Objects.equals(embeddedMessageId, that.embeddedMessageId) &&
|
||||||
|
Objects.equals(embeddingServer, that.embeddingServer) &&
|
||||||
|
Objects.equals(embeddingChannel, that.embeddingChannel) &&
|
||||||
|
Objects.equals(embeddingMessageId, that.embeddingMessageId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(embeddedUser, embeddingUser, embeddedServer, embeddedChannel, embeddedMessageId, embeddingServer, embeddingChannel, embeddingMessageId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,11 @@ import dev.sheldan.abstracto.core.models.database.AChannel;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="reminder")
|
@Table(name="reminder")
|
||||||
@@ -15,6 +17,8 @@ import java.time.Instant;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class Reminder {
|
public class Reminder {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -52,4 +56,24 @@ public class Reminder {
|
|||||||
@Getter
|
@Getter
|
||||||
private boolean reminded;
|
private boolean reminded;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
Reminder reminder = (Reminder) o;
|
||||||
|
return reminded == reminder.reminded &&
|
||||||
|
Objects.equals(id, reminder.id) &&
|
||||||
|
Objects.equals(remindedUser, reminder.remindedUser) &&
|
||||||
|
Objects.equals(messageId, reminder.messageId) &&
|
||||||
|
Objects.equals(channel, reminder.channel) &&
|
||||||
|
Objects.equals(server, reminder.server) &&
|
||||||
|
Objects.equals(reminderDate, reminder.reminderDate) &&
|
||||||
|
Objects.equals(targetDate, reminder.targetDate) &&
|
||||||
|
Objects.equals(text, reminder.text);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, remindedUser, messageId, channel, server, reminderDate, targetDate, text, reminded);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,12 @@ package dev.sheldan.abstracto.utility.models.database;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="starboard_post")
|
@Table(name="starboard_post")
|
||||||
@@ -15,6 +17,8 @@ import java.util.List;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class StarboardPost {
|
public class StarboardPost {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -52,6 +56,7 @@ public class StarboardPost {
|
|||||||
orphanRemoval = true,
|
orphanRemoval = true,
|
||||||
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||||
@JoinColumn(name="postId")
|
@JoinColumn(name="postId")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<StarboardPostReaction> reactions;
|
private List<StarboardPostReaction> reactions;
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
@@ -66,4 +71,26 @@ public class StarboardPost {
|
|||||||
}
|
}
|
||||||
return this.reactions.size();
|
return this.reactions.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
StarboardPost post = (StarboardPost) o;
|
||||||
|
return ignored == post.ignored &&
|
||||||
|
Objects.equals(id, post.id) &&
|
||||||
|
Objects.equals(author, post.author) &&
|
||||||
|
Objects.equals(starboardMessageId, post.starboardMessageId) &&
|
||||||
|
Objects.equals(postMessageId, post.postMessageId) &&
|
||||||
|
Objects.equals(starboardChannel, post.starboardChannel) &&
|
||||||
|
Objects.equals(sourceChanel, post.sourceChanel) &&
|
||||||
|
Objects.equals(reactionCount, post.reactionCount) &&
|
||||||
|
Objects.equals(reactions, post.reactions) &&
|
||||||
|
Objects.equals(starredDate, post.starredDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, author, starboardMessageId, postMessageId, starboardChannel, sourceChanel, reactionCount, reactions, starredDate, ignored);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package dev.sheldan.abstracto.utility.models.database;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="starboard_post_reaction")
|
@Table(name="starboard_post_reaction")
|
||||||
@@ -12,6 +14,8 @@ import javax.persistence.*;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class StarboardPostReaction {
|
public class StarboardPostReaction {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -26,4 +30,18 @@ public class StarboardPostReaction {
|
|||||||
@JoinColumn(name = "postId", nullable = false)
|
@JoinColumn(name = "postId", nullable = false)
|
||||||
private StarboardPost starboardPost;
|
private StarboardPost starboardPost;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
StarboardPostReaction that = (StarboardPostReaction) o;
|
||||||
|
return Objects.equals(id, that.id) &&
|
||||||
|
Objects.equals(reactor, that.reactor) &&
|
||||||
|
Objects.equals(starboardPost, that.starboardPost);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, reactor, starboardPost);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,13 +8,15 @@ import lombok.*;
|
|||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="suggestion")
|
@Table(name="suggestion")
|
||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Getter @Setter
|
@Getter
|
||||||
|
@Setter
|
||||||
public class Suggestion {
|
public class Suggestion {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -48,4 +50,22 @@ public class Suggestion {
|
|||||||
@Enumerated(EnumType.STRING)
|
@Enumerated(EnumType.STRING)
|
||||||
private SuggestionState state;
|
private SuggestionState state;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
Suggestion that = (Suggestion) o;
|
||||||
|
return Objects.equals(id, that.id) &&
|
||||||
|
Objects.equals(suggester, that.suggester) &&
|
||||||
|
Objects.equals(messageId, that.messageId) &&
|
||||||
|
Objects.equals(channel, that.channel) &&
|
||||||
|
Objects.equals(server, that.server) &&
|
||||||
|
Objects.equals(suggestionDate, that.suggestionDate) &&
|
||||||
|
state == that.state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(id, suggester, messageId, channel, server, suggestionDate, state);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,8 +89,14 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.ben-manes.caffeine</groupId>
|
<groupId>org.hibernate</groupId>
|
||||||
<artifactId>caffeine</artifactId>
|
<artifactId>hibernate-jcache</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.ehcache</groupId>
|
||||||
|
<artifactId>ehcache</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import dev.sheldan.abstracto.core.models.database.ARole;
|
|||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
|
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
|
||||||
@@ -52,7 +52,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ChannelManagementService channelManagementService;
|
private ChannelManagementService channelManagementService;
|
||||||
@@ -74,13 +74,14 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
if(!commandManager.isCommand(event.getMessage())) {
|
if(!commandManager.isCommand(event.getMessage())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
UserInitiatedServerContext userInitiatedContext = buildTemplateParameter(event);
|
||||||
CommandContext.CommandContextBuilder commandContextBuilder = CommandContext.builder()
|
CommandContext.CommandContextBuilder commandContextBuilder = CommandContext.builder()
|
||||||
.author(event.getMember())
|
.author(event.getMember())
|
||||||
.guild(event.getGuild())
|
.guild(event.getGuild())
|
||||||
.channel(event.getTextChannel())
|
.channel(event.getTextChannel())
|
||||||
.message(event.getMessage())
|
.message(event.getMessage())
|
||||||
.jda(event.getJDA())
|
.jda(event.getJDA())
|
||||||
.userInitiatedContext(buildTemplateParameter(event));
|
.userInitiatedContext(userInitiatedContext);
|
||||||
Command foundCommand = null;
|
Command foundCommand = null;
|
||||||
try {
|
try {
|
||||||
String contentStripped = event.getMessage().getContentStripped();
|
String contentStripped = event.getMessage().getContentStripped();
|
||||||
@@ -88,7 +89,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
UnParsedCommandParameter unparsedParameter = new UnParsedCommandParameter(contentStripped);
|
UnParsedCommandParameter unparsedParameter = new UnParsedCommandParameter(contentStripped);
|
||||||
String commandName = commandManager.getCommandName(parameters.get(0), event.getGuild().getIdLong());
|
String commandName = commandManager.getCommandName(parameters.get(0), event.getGuild().getIdLong());
|
||||||
foundCommand = commandManager.findCommandByParameters(commandName, unparsedParameter);
|
foundCommand = commandManager.findCommandByParameters(commandName, unparsedParameter);
|
||||||
Parameters parsedParameters = getParsedParameters(unparsedParameter, foundCommand, event.getMessage());
|
Parameters parsedParameters = getParsedParameters(unparsedParameter, foundCommand, event.getMessage(), userInitiatedContext);
|
||||||
CommandContext commandContext = commandContextBuilder.parameters(parsedParameters).build();
|
CommandContext commandContext = commandContextBuilder.parameters(parsedParameters).build();
|
||||||
CommandResult commandResult;
|
CommandResult commandResult;
|
||||||
if(foundCommand instanceof ConditionalCommand) {
|
if(foundCommand instanceof ConditionalCommand) {
|
||||||
@@ -134,7 +135,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
private UserInitiatedServerContext buildTemplateParameter(MessageReceivedEvent event) {
|
private UserInitiatedServerContext buildTemplateParameter(MessageReceivedEvent event) {
|
||||||
AChannel channel = channelManagementService.loadChannel(event.getChannel().getIdLong());
|
AChannel channel = channelManagementService.loadChannel(event.getChannel().getIdLong());
|
||||||
AServer server = serverManagementService.loadOrCreate(event.getGuild().getIdLong());
|
AServer server = serverManagementService.loadOrCreate(event.getGuild().getIdLong());
|
||||||
AUserInAServer user = userManagementService.loadUser(event.getMember());
|
AUserInAServer user = userInServerManagementService.loadUser(event.getMember());
|
||||||
return UserInitiatedServerContext
|
return UserInitiatedServerContext
|
||||||
.builder()
|
.builder()
|
||||||
.channel(channel)
|
.channel(channel)
|
||||||
@@ -147,7 +148,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){
|
public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message, UserInitiatedServerContext userInitiatedServerContext){
|
||||||
List<Object> parsedParameters = new ArrayList<>();
|
List<Object> parsedParameters = new ArrayList<>();
|
||||||
if(command.getConfiguration().getParameters() == null || command.getConfiguration().getParameters().isEmpty()) {
|
if(command.getConfiguration().getParameters() == null || command.getConfiguration().getParameters().isEmpty()) {
|
||||||
return Parameters.builder().parameters(parsedParameters).build();
|
return Parameters.builder().parameters(parsedParameters).build();
|
||||||
@@ -189,9 +190,9 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
}
|
}
|
||||||
} else if(param.getType().equals(ARole.class)) {
|
} else if(param.getType().equals(ARole.class)) {
|
||||||
if(StringUtils.isNumeric(value)) {
|
if(StringUtils.isNumeric(value)) {
|
||||||
parsedParameters.add(roleManagementService.findRole(Long.parseLong(value)));
|
parsedParameters.add(roleManagementService.findRole(Long.parseLong(value), userInitiatedServerContext.getServer()));
|
||||||
} else {
|
} else {
|
||||||
parsedParameters.add(roleManagementService.findRole(roleIterator.next().getIdLong()));
|
parsedParameters.add(roleManagementService.findRole(roleIterator.next().getIdLong(), userInitiatedServerContext.getServer()));
|
||||||
}
|
}
|
||||||
} else if(param.getType().equals(Boolean.class)) {
|
} else if(param.getType().equals(Boolean.class)) {
|
||||||
parsedParameters.add(Boolean.valueOf(value));
|
parsedParameters.add(Boolean.valueOf(value));
|
||||||
|
|||||||
@@ -4,10 +4,16 @@ import dev.sheldan.abstracto.core.command.models.database.ACommand;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
|
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannelGroupCommand;
|
import dev.sheldan.abstracto.core.models.database.AChannelGroupCommand;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface ChannelGroupCommandRepository extends JpaRepository<AChannelGroupCommand, Long> {
|
public interface ChannelGroupCommandRepository extends JpaRepository<AChannelGroupCommand, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
AChannelGroupCommand findByCommandAndGroup(ACommand command, AChannelGroup group);
|
AChannelGroupCommand findByCommandAndGroup(ACommand command, AChannelGroup group);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<AChannelGroupCommand> findByCommand(ACommand command);
|
List<AChannelGroupCommand> findByCommand(ACommand command);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,14 @@ import dev.sheldan.abstracto.core.command.models.database.ACommand;
|
|||||||
import dev.sheldan.abstracto.core.command.models.database.ACommandInAServer;
|
import dev.sheldan.abstracto.core.command.models.database.ACommandInAServer;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface CommandInServerRepository extends JpaRepository<ACommandInAServer, Long> {
|
public interface CommandInServerRepository extends JpaRepository<ACommandInAServer, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
ACommandInAServer findByServerReferenceAndCommandReference(AServer server, ACommand command);
|
ACommandInAServer findByServerReferenceAndCommandReference(AServer server, ACommand command);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,12 @@ package dev.sheldan.abstracto.core.command.repository;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.command.models.database.ACommand;
|
import dev.sheldan.abstracto.core.command.models.database.ACommand;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
|
|
||||||
public interface CommandRepository extends JpaRepository<ACommand, Long> {
|
public interface CommandRepository extends JpaRepository<ACommand, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
ACommand findByName(String name);
|
ACommand findByName(String name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,12 @@ package dev.sheldan.abstracto.core.command.repository;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.command.models.database.AModule;
|
import dev.sheldan.abstracto.core.command.models.database.AModule;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
|
|
||||||
public interface ModuleRepository extends JpaRepository<AModule, Long> {
|
public interface ModuleRepository extends JpaRepository<AModule, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
AModule findByName(String name);
|
AModule findByName(String name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package dev.sheldan.abstracto.core.commands.config;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
|
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
||||||
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
|
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||||
|
import dev.sheldan.abstracto.core.config.features.CoreFeatures;
|
||||||
|
import dev.sheldan.abstracto.core.service.CacheServiceBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class ClearCache extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CacheServiceBean cacheServiceBean;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
|
cacheServiceBean.clearCaches();
|
||||||
|
return CommandResult.fromSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandConfiguration getConfiguration() {
|
||||||
|
List<Parameter> parameters = new ArrayList<>();
|
||||||
|
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
||||||
|
return CommandConfiguration.builder()
|
||||||
|
.name("clearCache")
|
||||||
|
.module(ConfigModuleInterface.CONFIG)
|
||||||
|
.parameters(parameters)
|
||||||
|
.help(helpInfo)
|
||||||
|
.templated(true)
|
||||||
|
.causesReaction(true)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeatureEnum getFeature() {
|
||||||
|
return CoreFeatures.CORE_FEATURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package dev.sheldan.abstracto.core;
|
package dev.sheldan.abstracto.core.config;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -35,7 +35,7 @@ public class FeatureFlagListener implements ServerConfigListener {
|
|||||||
String featureKey = featureFlagKey.getFeature().getKey();
|
String featureKey = featureFlagKey.getFeature().getKey();
|
||||||
AFeature feature = featureManagementService.getFeature(featureKey);
|
AFeature feature = featureManagementService.getFeature(featureKey);
|
||||||
boolean featureFlagValue = BooleanUtils.toBoolean(environment.getProperty("abstracto.features." + featureKey, "false"));
|
boolean featureFlagValue = BooleanUtils.toBoolean(environment.getProperty("abstracto.features." + featureKey, "false"));
|
||||||
if(!service.getFeatureFlag(feature, server.getId()).isPresent()) {
|
if(service.getFeatureFlag(feature, server.getId()) == null) {
|
||||||
service.createFeatureFlag(feature, server.getId(), featureFlagValue);
|
service.createFeatureFlag(feature, server.getId(), featureFlagValue);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package dev.sheldan.abstracto.core.listener;
|
|||||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
||||||
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
|
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
|
||||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
@@ -26,7 +26,7 @@ public class JoinListenerBean extends ListenerAdapter {
|
|||||||
private FeatureFlagService featureFlagService;
|
private FeatureFlagService featureFlagService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
@@ -37,7 +37,7 @@ public class JoinListenerBean extends ListenerAdapter {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
AUserInAServer aUserInAServer = userManagementService.loadUser(event.getMember());
|
AUserInAServer aUserInAServer = userInServerManagementService.loadUser(event.getMember());
|
||||||
executeListener(event, joinListener, aUserInAServer);
|
executeListener(event, joinListener, aUserInAServer);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Listener {} failed with exception:", joinListener.getClass().getName(), e);
|
log.error("Listener {} failed with exception:", joinListener.getClass().getName(), e);
|
||||||
|
|||||||
@@ -27,16 +27,20 @@ public class MessageReceivedListenerBean extends ListenerAdapter {
|
|||||||
private FeatureFlagService featureFlagService;
|
private FeatureFlagService featureFlagService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
|
||||||
public void onGuildMessageReceived(@Nonnull GuildMessageReceivedEvent event) {
|
public void onGuildMessageReceived(@Nonnull GuildMessageReceivedEvent event) {
|
||||||
messageCache.putMessageInCache(event.getMessage());
|
messageCache.putMessageInCache(event.getMessage());
|
||||||
listenerList.forEach(messageReceivedListener -> {
|
listenerList.forEach(messageReceivedListener -> {
|
||||||
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(messageReceivedListener.getFeature());
|
try {
|
||||||
if(!featureFlagService.isFeatureEnabled(feature, event.getGuild().getIdLong())) {
|
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(messageReceivedListener.getFeature());
|
||||||
return;
|
if(!featureFlagService.isFeatureEnabled(feature, event.getGuild().getIdLong())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
messageReceivedListener.execute(event.getMessage());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Listener {} had exception when executing.", messageReceivedListener, e);
|
||||||
}
|
}
|
||||||
messageReceivedListener.execute(event.getMessage());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import dev.sheldan.abstracto.core.config.FeatureConfig;
|
|||||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||||
import dev.sheldan.abstracto.core.service.BotService;
|
import dev.sheldan.abstracto.core.service.BotService;
|
||||||
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
||||||
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.cache.CachedMessage;
|
||||||
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
|
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
@@ -33,7 +33,7 @@ public class ReactionUpdatedListener extends ListenerAdapter {
|
|||||||
private MessageCache messageCache;
|
private MessageCache messageCache;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserManagementService userManagementService;
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private List<ReactedAddedListener> addedListenerList;
|
private List<ReactedAddedListener> addedListenerList;
|
||||||
@@ -95,7 +95,7 @@ public class ReactionUpdatedListener extends ListenerAdapter {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void callAddedListeners(@Nonnull GuildMessageReactionAddEvent event, CachedMessage cachedMessage, CachedReaction reaction) {
|
public void callAddedListeners(@Nonnull GuildMessageReactionAddEvent event, CachedMessage cachedMessage, CachedReaction reaction) {
|
||||||
AUserInAServer userInAServer = userManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
|
AUserInAServer userInAServer = userInServerManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
|
||||||
addReactionIfNotThere(cachedMessage, reaction, userInAServer.getUserReference());
|
addReactionIfNotThere(cachedMessage, reaction, userInAServer.getUserReference());
|
||||||
addedListenerList.forEach(reactedAddedListener -> {
|
addedListenerList.forEach(reactedAddedListener -> {
|
||||||
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(reactedAddedListener.getFeature());
|
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(reactedAddedListener.getFeature());
|
||||||
@@ -130,7 +130,7 @@ public class ReactionUpdatedListener extends ListenerAdapter {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void callRemoveListeners(@Nonnull GuildMessageReactionRemoveEvent event, CachedMessage cachedMessage, CachedReaction reaction) {
|
public void callRemoveListeners(@Nonnull GuildMessageReactionRemoveEvent event, CachedMessage cachedMessage, CachedReaction reaction) {
|
||||||
AUserInAServer userInAServer = userManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
|
AUserInAServer userInAServer = userInServerManagementService.loadUser(event.getGuild().getIdLong(), event.getUserIdLong());
|
||||||
removeReactionIfThere(cachedMessage, reaction, userInAServer.getUserReference());
|
removeReactionIfThere(cachedMessage, reaction, userInAServer.getUserReference());
|
||||||
reactionRemovedListener.forEach(reactionRemovedListener -> {
|
reactionRemovedListener.forEach(reactionRemovedListener -> {
|
||||||
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(reactionRemovedListener.getFeature());
|
FeatureConfig feature = featureFlagService.getFeatureDisplayForFeature(reactionRemovedListener.getFeature());
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ public class RoleListener extends ListenerAdapter {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public void onRoleDelete(@Nonnull RoleDeleteEvent event) {
|
public void onRoleDelete(@Nonnull RoleDeleteEvent event) {
|
||||||
roleService.markDeleted(event.getRole());
|
AServer server = serverManagementService.loadOrCreate(event.getGuild().getIdLong());
|
||||||
|
roleService.markDeleted(event.getRole(), server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,16 @@ package dev.sheldan.abstracto.core.repository;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
|
import dev.sheldan.abstracto.core.models.database.AChannelGroup;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface ChannelGroupRepository extends JpaRepository<AChannelGroup, Long> {
|
public interface ChannelGroupRepository extends JpaRepository<AChannelGroup, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
AChannelGroup findByGroupNameAndServer(String name, AServer server);
|
AChannelGroup findByGroupNameAndServer(String name, AServer server);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<AChannelGroup> findByServer(AServer server);
|
List<AChannelGroup> findByServer(AServer server);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,15 @@ package dev.sheldan.abstracto.core.repository;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface ChannelRepository extends JpaRepository<AChannel, Long> {
|
public interface ChannelRepository extends JpaRepository<AChannel, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<AChannel> findAll();
|
List<AChannel> findAll();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,12 @@ package dev.sheldan.abstracto.core.repository;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AConfig;
|
import dev.sheldan.abstracto.core.models.database.AConfig;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
|
|
||||||
public interface ConfigRepository extends JpaRepository<AConfig, Long> {
|
public interface ConfigRepository extends JpaRepository<AConfig, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
AConfig findAConfigByServerIdAndName(Long serverId, String name);
|
AConfig findAConfigByServerIdAndName(Long serverId, String name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,17 @@ package dev.sheldan.abstracto.core.repository;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface EmoteRepository extends JpaRepository<AEmote, Long> {
|
public interface EmoteRepository extends JpaRepository<AEmote, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
AEmote findAEmoteByNameAndServerRef(String name, AServer server);
|
AEmote findAEmoteByNameAndServerRef(String name, AServer server);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
boolean existsByNameAndServerRef(String name, AServer server);
|
boolean existsByNameAndServerRef(String name, AServer server);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,16 @@ import dev.sheldan.abstracto.core.models.database.AFeature;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface FeatureFlagRepository extends JpaRepository<AFeatureFlag, Long> {
|
public interface FeatureFlagRepository extends JpaRepository<AFeatureFlag, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
AFeatureFlag findByServerAndFeature(AServer server, AFeature key);
|
AFeatureFlag findByServerAndFeature(AServer server, AFeature key);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
List<AFeatureFlag> findAllByServer(AServer server);
|
List<AFeatureFlag> findAllByServer(AServer server);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,14 @@ package dev.sheldan.abstracto.core.repository;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface FeatureRepository extends JpaRepository<AFeature, Long> {
|
public interface FeatureRepository extends JpaRepository<AFeature, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
AFeature findByKey(String key);
|
AFeature findByKey(String key);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,15 @@ package dev.sheldan.abstracto.core.repository;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface PostTargetRepository extends JpaRepository<PostTarget, Long> {
|
public interface PostTargetRepository extends JpaRepository<PostTarget, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
PostTarget findPostTargetByNameAndServerReference(String name, AServer server);
|
PostTarget findPostTargetByNameAndServerReference(String name, AServer server);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,17 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AUser;
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.QueryHints;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import javax.persistence.QueryHint;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface UserInServerRepository extends JpaRepository<AUserInAServer, Long> {
|
public interface UserInServerRepository extends JpaRepository<AUserInAServer, Long> {
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
AUserInAServer findByServerReferenceAndUserReference(AServer serverId, AUser userId);
|
AUserInAServer findByServerReferenceAndUserReference(AServer serverId, AUser userId);
|
||||||
|
|
||||||
|
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||||
boolean existsByServerReferenceAndUserReference(AServer server, AUser user);
|
boolean existsByServerReferenceAndUserReference(AServer server, AUser user);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package dev.sheldan.abstracto.core.service;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManagerFactory;
|
||||||
|
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class CacheServiceBean {
|
||||||
|
|
||||||
|
private SessionFactory sessionFactory;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public CacheServiceBean(EntityManagerFactory factory) {
|
||||||
|
SessionFactory unWrapped = factory.unwrap(SessionFactory.class);
|
||||||
|
if(unWrapped == null){
|
||||||
|
throw new AbstractoRunTimeException("Factory is not a hibernate factory.");
|
||||||
|
}
|
||||||
|
this.sessionFactory = unWrapped;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearCaches() {
|
||||||
|
sessionFactory.getCache().evictAllRegions();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -35,11 +35,6 @@ public class ConfigServiceBean implements ConfigService{
|
|||||||
return config.getStringValue();
|
return config.getStringValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void createDoubleValueIfNotExist(String name, Long serverId, Double value) {
|
|
||||||
configManagementService.createIfNotExists(serverId, name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDoubleValue(String name, Long serverId, Double value) {
|
public void setDoubleValue(String name, Long serverId, Double value) {
|
||||||
if(configManagementService.configExists(serverId, name)) {
|
if(configManagementService.configExists(serverId, name)) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package dev.sheldan.abstracto.core.service;
|
package dev.sheldan.abstracto.core.service;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.DynamicKeyLoader;
|
import dev.sheldan.abstracto.core.config.DynamicKeyLoader;
|
||||||
import dev.sheldan.abstracto.core.exception.EmoteException;
|
import dev.sheldan.abstracto.core.exception.EmoteException;
|
||||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||||
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
|
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
package dev.sheldan.abstracto.core.service;
|
package dev.sheldan.abstracto.core.service;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
import dev.sheldan.abstracto.core.config.FeatureConfig;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||||
import dev.sheldan.abstracto.core.exception.FeatureNotFoundException;
|
import dev.sheldan.abstracto.core.exception.FeatureNotFoundException;
|
||||||
|
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 dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
|
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
@@ -20,6 +23,9 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private FeatureFlagManagementService managementService;
|
private FeatureFlagManagementService managementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FeatureManagementService featureManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private List<FeatureConfig> availableFeatures;
|
private List<FeatureConfig> availableFeatures;
|
||||||
|
|
||||||
@@ -29,12 +35,12 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isFeatureEnabled(FeatureConfig name, Long serverId) {
|
public boolean isFeatureEnabled(FeatureConfig name, Long serverId) {
|
||||||
return managementService.getFeatureFlagValue(name.getFeature(), serverId);
|
return getFeatureFlagValue(name.getFeature(), serverId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isFeatureEnabled(FeatureConfig name, AServer server) {
|
public boolean isFeatureEnabled(FeatureConfig name, AServer server) {
|
||||||
return managementService.getFeatureFlagValue(name.getFeature(), server);
|
return getFeatureFlagValue(name.getFeature(), server);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -49,7 +55,7 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
|||||||
if(!doesFeatureExist(name)) {
|
if(!doesFeatureExist(name)) {
|
||||||
throw new FeatureNotFoundException("Feature not found.", feature.getKey(), getFeaturesAsList());
|
throw new FeatureNotFoundException("Feature not found.", feature.getKey(), getFeaturesAsList());
|
||||||
}
|
}
|
||||||
managementService.updateFeatureFlag(feature, server, true);
|
updateFeatureFlag(feature, server, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,7 +70,7 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
|||||||
if(!doesFeatureExist(name)) {
|
if(!doesFeatureExist(name)) {
|
||||||
throw new FeatureNotFoundException("Feature not found.", feature.getKey(), getFeaturesAsList());
|
throw new FeatureNotFoundException("Feature not found.", feature.getKey(), getFeaturesAsList());
|
||||||
}
|
}
|
||||||
managementService.updateFeatureFlag(feature, server, false);
|
updateFeatureFlag(feature, server, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -115,4 +121,28 @@ public class FeatureFlagServiceBean implements FeatureFlagService {
|
|||||||
}
|
}
|
||||||
throw new AbstractoRunTimeException(String.format("Feature %s not found.", key));
|
throw new AbstractoRunTimeException(String.format("Feature %s not found.", key));
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public boolean getFeatureFlagValue(FeatureEnum key, Long serverId) {
|
||||||
|
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||||
|
return getFeatureFlagValue(key, server);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getFeatureFlagValue(FeatureEnum key, AServer server) {
|
||||||
|
AFeature feature = featureManagementService.getFeature(key.getKey());
|
||||||
|
AFeatureFlag featureFlag = managementService.getFeatureFlag(feature, server);
|
||||||
|
return featureFlag.isEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AFeatureFlag updateFeatureFlag(FeatureEnum key, Long serverId, Boolean newValue) {
|
||||||
|
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||||
|
return updateFeatureFlag(key, server, newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AFeatureFlag updateFeatureFlag(FeatureEnum key, AServer server, Boolean newValue) {
|
||||||
|
AFeature feature = featureManagementService.getFeature(key.getKey());
|
||||||
|
return managementService.setFeatureFlagValue(feature, server, newValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import net.dv8tion.jda.api.entities.*;
|
import net.dv8tion.jda.api.entities.*;
|
||||||
import net.dv8tion.jda.api.requests.restaction.pagination.ReactionPaginationAction;
|
import net.dv8tion.jda.api.requests.restaction.pagination.ReactionPaginationAction;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.cache.annotation.CacheConfig;
|
||||||
import org.springframework.cache.annotation.CachePut;
|
import org.springframework.cache.annotation.CachePut;
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
@@ -26,6 +27,7 @@ import java.util.concurrent.ExecutionException;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@CacheConfig(cacheNames = "messages")
|
||||||
public class MessageCacheBean implements MessageCache {
|
public class MessageCacheBean implements MessageCache {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -40,7 +42,7 @@ public class MessageCacheBean implements MessageCache {
|
|||||||
private MessageCache self;
|
private MessageCache self;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@CachePut(key = "#message.id", cacheNames = "messages")
|
@CachePut(key = "#message.id")
|
||||||
public CompletableFuture<CachedMessage> putMessageInCache(Message message) {
|
public CompletableFuture<CachedMessage> putMessageInCache(Message message) {
|
||||||
log.info("Adding message {} to cache", message.getId());
|
log.info("Adding message {} to cache", message.getId());
|
||||||
CompletableFuture<CachedMessage> future = new CompletableFuture<>();
|
CompletableFuture<CachedMessage> future = new CompletableFuture<>();
|
||||||
@@ -56,14 +58,14 @@ public class MessageCacheBean implements MessageCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Cacheable(key = "#message.id", cacheNames = "messages")
|
@Cacheable(key = "#message.id")
|
||||||
public CompletableFuture<CachedMessage> getMessageFromCache(Message message) {
|
public CompletableFuture<CachedMessage> getMessageFromCache(Message message) {
|
||||||
log.info("Retrieving message {}", message.getId());
|
log.info("Retrieving message {}", message.getId());
|
||||||
return getMessageFromCache(message.getGuild().getIdLong(), message.getChannel().getIdLong(), message.getIdLong());
|
return getMessageFromCache(message.getGuild().getIdLong(), message.getChannel().getIdLong(), message.getIdLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Cacheable(key = "#messageId.toString()", cacheNames = "messages")
|
@Cacheable(key = "#messageId.toString()")
|
||||||
public CompletableFuture<CachedMessage> getMessageFromCache(Long guildId, Long textChannelId, Long messageId) {
|
public CompletableFuture<CachedMessage> getMessageFromCache(Long guildId, Long textChannelId, Long messageId) {
|
||||||
log.info("Retrieving message with parameters");
|
log.info("Retrieving message with parameters");
|
||||||
|
|
||||||
@@ -204,4 +206,5 @@ public class MessageCacheBean implements MessageCache {
|
|||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package dev.sheldan.abstracto.core.service;
|
package dev.sheldan.abstracto.core.service;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.DynamicKeyLoader;
|
import dev.sheldan.abstracto.core.config.DynamicKeyLoader;
|
||||||
import dev.sheldan.abstracto.core.exception.ChannelException;
|
import dev.sheldan.abstracto.core.exception.ChannelException;
|
||||||
import dev.sheldan.abstracto.core.exception.GuildException;
|
import dev.sheldan.abstracto.core.exception.GuildException;
|
||||||
import dev.sheldan.abstracto.core.service.management.PostTargetManagement;
|
import dev.sheldan.abstracto.core.service.management.PostTargetManagement;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.core.service;
|
|||||||
import dev.sheldan.abstracto.core.exception.GuildException;
|
import dev.sheldan.abstracto.core.exception.GuildException;
|
||||||
import dev.sheldan.abstracto.core.exception.RoleException;
|
import dev.sheldan.abstracto.core.exception.RoleException;
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
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 dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -59,13 +60,13 @@ public class RoleServiceBean implements RoleService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markDeleted(Role role) {
|
public void markDeleted(Role role, AServer server) {
|
||||||
markDeleted(role.getIdLong());
|
markDeleted(role.getIdLong(), server);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markDeleted(Long id) {
|
public void markDeleted(Long id, AServer server) {
|
||||||
ARole role = roleManagementService.findRole(id);
|
ARole role = roleManagementService.findRole(id, server);
|
||||||
if(role != null) {
|
if(role != null) {
|
||||||
roleManagementService.markDeleted(role);
|
roleManagementService.markDeleted(role);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ public class ChannelGroupManagementServiceBean implements ChannelGroupManagement
|
|||||||
}
|
}
|
||||||
channelGroup.getChannels().add(channel);
|
channelGroup.getChannels().add(channel);
|
||||||
channel.getGroups().add(channelGroup);
|
channel.getGroups().add(channelGroup);
|
||||||
channelGroupRepository.save(channelGroup);
|
|
||||||
return channelGroup;
|
return channelGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,7 +65,6 @@ public class ChannelGroupManagementServiceBean implements ChannelGroupManagement
|
|||||||
}
|
}
|
||||||
channelGroup.getChannels().removeIf(channelInGroupPredicate);
|
channelGroup.getChannels().removeIf(channelInGroupPredicate);
|
||||||
channel.getGroups().removeIf(channelGroup1 -> channelGroup1.getId().equals(channelGroup.getId()));
|
channel.getGroups().removeIf(channelGroup1 -> channelGroup1.getId().equals(channelGroup.getId()));
|
||||||
channelGroupRepository.save(channelGroup);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -34,10 +34,10 @@ public class ChannelManagementServiceBean implements ChannelManagementService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markAsDeleted(Long id) {
|
public AChannel markAsDeleted(Long id) {
|
||||||
AChannel channel = loadChannel(id);
|
AChannel channel = loadChannel(id);
|
||||||
channel.setDeleted(true);
|
channel.setDeleted(true);
|
||||||
repository.save(channel);
|
return channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3,10 +3,12 @@ package dev.sheldan.abstracto.core.service.management;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AConfig;
|
import dev.sheldan.abstracto.core.models.database.AConfig;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.repository.ConfigRepository;
|
import dev.sheldan.abstracto.core.repository.ConfigRepository;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class ConfigManagementServiceBean implements ConfigManagementService {
|
public class ConfigManagementServiceBean implements ConfigManagementService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -16,23 +18,25 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
|
|||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOrCreateStringValue(Long serverId, String name, String value) {
|
public AConfig setOrCreateStringValue(Long serverId, String name, String value) {
|
||||||
AConfig config = loadConfig(serverId, name);
|
AConfig config = loadConfig(serverId, name);
|
||||||
if(config == null) {
|
if(config == null) {
|
||||||
createConfig(serverId, name, value);
|
createConfig(serverId, name, value);
|
||||||
} else {
|
} else {
|
||||||
config.setStringValue(value);
|
config.setStringValue(value);
|
||||||
}
|
}
|
||||||
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOrCreateDoubleValue(Long serverId, String name, Double value) {
|
public AConfig setOrCreateDoubleValue(Long serverId, String name, Double value) {
|
||||||
AConfig config = loadConfig(serverId, name);
|
AConfig config = loadConfig(serverId, name);
|
||||||
if(config == null) {
|
if(config == null) {
|
||||||
createConfig(serverId, name, value);
|
createConfig(serverId, name, value);
|
||||||
} else {
|
} else {
|
||||||
config.setDoubleValue(value);
|
config.setDoubleValue(value);
|
||||||
}
|
}
|
||||||
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -90,15 +94,17 @@ public class ConfigManagementServiceBean implements ConfigManagementService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setDoubleValue(Long serverId, String name, Double value) {
|
public AConfig setDoubleValue(Long serverId, String name, Double value) {
|
||||||
AConfig config = loadConfig(serverId, name);
|
AConfig config = loadConfig(serverId, name);
|
||||||
config.setDoubleValue(value);
|
config.setDoubleValue(value);
|
||||||
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setStringValue(Long serverId, String name, String value) {
|
public AConfig setStringValue(Long serverId, String name, String value) {
|
||||||
AConfig config = loadConfig(serverId, name);
|
AConfig config = loadConfig(serverId, name);
|
||||||
config.setStringValue(value);
|
config.setStringValue(value);
|
||||||
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package dev.sheldan.abstracto.core.service.management;
|
package dev.sheldan.abstracto.core.service.management;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.DynamicKeyLoader;
|
import dev.sheldan.abstracto.core.config.DynamicKeyLoader;
|
||||||
import dev.sheldan.abstracto.core.exception.EmoteException;
|
import dev.sheldan.abstracto.core.exception.EmoteException;
|
||||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
@@ -145,30 +145,6 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
|
|||||||
return repository.existsByNameAndServerRef(name, server);
|
return repository.existsByNameAndServerRef(name, server);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated) {
|
|
||||||
AEmote emote = AEmote.builder()
|
|
||||||
.animated(animated)
|
|
||||||
.custom(true)
|
|
||||||
.emoteKey(emoteKey)
|
|
||||||
.emoteId(emoteId)
|
|
||||||
.name(name)
|
|
||||||
.build();
|
|
||||||
repository.save(emote);
|
|
||||||
return emote;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AEmote createDefaultEmote(String name, String emoteKey) {
|
|
||||||
AEmote emote = AEmote.builder()
|
|
||||||
.custom(false)
|
|
||||||
.emoteKey(emoteKey)
|
|
||||||
.name(name)
|
|
||||||
.build();
|
|
||||||
repository.save(emote);
|
|
||||||
return emote;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void validateEmoteName(String name) {
|
private void validateEmoteName(String name) {
|
||||||
List<String> possibleEmotes = dynamicKeyLoader.getEmoteNamesAsList();
|
List<String> possibleEmotes = dynamicKeyLoader.getEmoteNamesAsList();
|
||||||
if(!possibleEmotes.contains(name)) {
|
if(!possibleEmotes.contains(name)) {
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package dev.sheldan.abstracto.core.service.management;
|
package dev.sheldan.abstracto.core.service.management;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
|
import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AFeature;
|
import dev.sheldan.abstracto.core.models.database.AFeature;
|
||||||
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
@@ -25,13 +24,13 @@ public class FeatureFlagManagementServiceBean implements FeatureFlagManagementSe
|
|||||||
private FeatureManagementService featureManagementService;
|
private FeatureManagementService featureManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFeatureFlag(AFeature feature, Long serverId, Boolean newValue) {
|
public AFeatureFlag createFeatureFlag(AFeature feature, Long serverId, Boolean newValue) {
|
||||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||||
createFeatureFlag(feature, server, newValue);
|
return createFeatureFlag(feature, server, newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFeatureFlag(AFeature feature, AServer server, Boolean newValue) {
|
public AFeatureFlag createFeatureFlag(AFeature feature, AServer server, Boolean newValue) {
|
||||||
AFeatureFlag featureFlag = AFeatureFlag
|
AFeatureFlag featureFlag = AFeatureFlag
|
||||||
.builder()
|
.builder()
|
||||||
.enabled(newValue)
|
.enabled(newValue)
|
||||||
@@ -39,52 +38,37 @@ public class FeatureFlagManagementServiceBean implements FeatureFlagManagementSe
|
|||||||
.server(server)
|
.server(server)
|
||||||
.build();
|
.build();
|
||||||
repository.save(featureFlag);
|
repository.save(featureFlag);
|
||||||
|
return featureFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean getFeatureFlagValue(FeatureEnum key, Long serverId) {
|
public AFeatureFlag getFeatureFlag(AFeature feature, Long serverId) {
|
||||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
|
||||||
return getFeatureFlagValue(key, server);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean getFeatureFlagValue(FeatureEnum key, AServer server) {
|
|
||||||
AFeature feature = featureManagementService.getFeature(key.getKey());
|
|
||||||
Optional<AFeatureFlag> featureFlag = getFeatureFlag(feature, server);
|
|
||||||
return featureFlag.isPresent() && featureFlag.get().isEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateFeatureFlag(FeatureEnum key, Long serverId, Boolean newValue) {
|
|
||||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
|
||||||
updateFeatureFlag(key, server, newValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateFeatureFlag(FeatureEnum key, AServer server, Boolean newValue) {
|
|
||||||
AFeature feature = featureManagementService.getFeature(key.getKey());
|
|
||||||
Optional<AFeatureFlag> existing = getFeatureFlag(feature, server);
|
|
||||||
if(existing.isPresent()) {
|
|
||||||
AFeatureFlag flag = existing.get();
|
|
||||||
flag.setEnabled(newValue);
|
|
||||||
repository.save(flag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<AFeatureFlag> getFeatureFlag(AFeature feature, Long serverId) {
|
|
||||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||||
return getFeatureFlag(feature, server);
|
return getFeatureFlag(feature, server);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<AFeatureFlag> getFeatureFlag(AFeature key, AServer server) {
|
public AFeatureFlag getFeatureFlag(AFeature feature, AServer server) {
|
||||||
return Optional.ofNullable(repository.findByServerAndFeature(server, key));
|
return repository.findByServerAndFeature(server, feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AFeatureFlag> getFeatureFlagsOfServer(AServer server) {
|
public List<AFeatureFlag> getFeatureFlagsOfServer(AServer server) {
|
||||||
return repository.findAllByServer(server);
|
return repository.findAllByServer(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AFeatureFlag setFeatureFlagValue(AFeature feature, Long serverId, Boolean newValue) {
|
||||||
|
AFeatureFlag featureFlag = getFeatureFlag(feature, serverId);
|
||||||
|
featureFlag.setEnabled(newValue);
|
||||||
|
return featureFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AFeatureFlag setFeatureFlagValue(AFeature feature, AServer server, Boolean newValue) {
|
||||||
|
AFeatureFlag featureFlag = getFeatureFlag(feature, server);
|
||||||
|
featureFlag.setEnabled(newValue);
|
||||||
|
return featureFlag;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package dev.sheldan.abstracto.core.service.management;
|
package dev.sheldan.abstracto.core.service.management;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.DynamicKeyLoader;
|
import dev.sheldan.abstracto.core.config.DynamicKeyLoader;
|
||||||
import dev.sheldan.abstracto.core.exception.PostTargetException;
|
import dev.sheldan.abstracto.core.exception.PostTargetException;
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
@@ -9,7 +9,6 @@ import dev.sheldan.abstracto.core.service.PostTargetService;
|
|||||||
import dev.sheldan.abstracto.core.repository.PostTargetRepository;
|
import dev.sheldan.abstracto.core.repository.PostTargetRepository;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@@ -32,39 +31,40 @@ public class PostTargetManagementBean implements PostTargetManagement {
|
|||||||
private PostTargetService postTargetService;
|
private PostTargetService postTargetService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createPostTarget(String name, AServer server, AChannel targetChannel) {
|
public PostTarget createPostTarget(String name, AServer server, AChannel targetChannel) {
|
||||||
if(!postTargetService.validPostTarget(name)) {
|
if(!postTargetService.validPostTarget(name)) {
|
||||||
throw new PostTargetException("PostTarget not found. Possible values are: " + String.join(", ", dynamicKeyLoader.getPostTargetsAsList()));
|
throw new PostTargetException("PostTarget not found. Possible values are: " + String.join(", ", dynamicKeyLoader.getPostTargetsAsList()));
|
||||||
}
|
}
|
||||||
log.info("Creating post target {} pointing towards {}", name, targetChannel);
|
log.info("Creating post target {} pointing towards {}", name, targetChannel);
|
||||||
postTargetRepository.save(PostTarget.builder().name(name).channelReference(targetChannel).serverReference(server).build());
|
PostTarget build = PostTarget.builder().name(name).channelReference(targetChannel).serverReference(server).build();
|
||||||
|
postTargetRepository.save(build);
|
||||||
|
return build;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createOrUpdate(String name, AServer server, AChannel targetChannel) {
|
public PostTarget createOrUpdate(String name, AServer server, AChannel targetChannel) {
|
||||||
PostTarget existing = postTargetRepository.findPostTargetByNameAndServerReference(name, server);
|
PostTarget existing = postTargetRepository.findPostTargetByNameAndServerReference(name, server);
|
||||||
if(existing == null){
|
if(existing == null){
|
||||||
this.createPostTarget(name, server, targetChannel);
|
return this.createPostTarget(name, server, targetChannel);
|
||||||
} else {
|
} else {
|
||||||
this.updatePostTarget(existing, server, targetChannel);
|
return this.updatePostTarget(existing, server, targetChannel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createOrUpdate(String name, AServer server, Long channelId) {
|
public PostTarget createOrUpdate(String name, AServer server, Long channelId) {
|
||||||
AChannel dbChannel = channelManagementService.loadChannel(channelId);
|
AChannel dbChannel = channelManagementService.loadChannel(channelId);
|
||||||
createOrUpdate(name, server, dbChannel);
|
return createOrUpdate(name, server, dbChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createOrUpdate(String name, Long serverId, Long channelId) {
|
public PostTarget createOrUpdate(String name, Long serverId, Long channelId) {
|
||||||
AChannel dbChannel = channelManagementService.loadChannel(channelId);
|
AChannel dbChannel = channelManagementService.loadChannel(channelId);
|
||||||
AServer dbServer = serverManagementService.loadOrCreate(serverId);
|
AServer dbServer = serverManagementService.loadOrCreate(serverId);
|
||||||
createOrUpdate(name, dbServer, dbChannel);
|
return createOrUpdate(name, dbServer, dbChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Cacheable("posttargets")
|
|
||||||
public PostTarget getPostTarget(String name, AServer server) {
|
public PostTarget getPostTarget(String name, AServer server) {
|
||||||
return postTargetRepository.findPostTargetByNameAndServerReference(name, server);
|
return postTargetRepository.findPostTargetByNameAndServerReference(name, server);
|
||||||
}
|
}
|
||||||
@@ -76,8 +76,9 @@ public class PostTargetManagementBean implements PostTargetManagement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updatePostTarget(PostTarget target, AServer server, AChannel newTargetChannel) {
|
public PostTarget updatePostTarget(PostTarget target, AServer server, AChannel newTargetChannel) {
|
||||||
postTargetRepository.getOne(target.getId()).setChannelReference(newTargetChannel);
|
target.setChannelReference(newTargetChannel);
|
||||||
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public class RoleManagementServiceBean implements RoleManagementService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ARole findRole(Long id) {
|
public ARole findRole(Long id, AServer server) {
|
||||||
return repository.getOne(id);
|
return repository.getOne(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package dev.sheldan.abstracto.core.service.management;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
|
import dev.sheldan.abstracto.core.repository.UserInServerRepository;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class UserInServerManagementServiceBean implements UserInServerManagementService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserInServerRepository userInServerRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserManagementService userManagementService;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AUserInAServer loadUser(Long serverId, Long userId) {
|
||||||
|
AUser user = userManagementService.loadUser(userId);
|
||||||
|
AServer server = serverManagementService.loadOrCreate(serverId);
|
||||||
|
return loadUser(server, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AUserInAServer loadUser(AServer server, AUser user) {
|
||||||
|
if(userInServerRepository.existsByServerReferenceAndUserReference(server, user)) {
|
||||||
|
return userInServerRepository.findByServerReferenceAndUserReference(server, user);
|
||||||
|
} else {
|
||||||
|
return this.createUserInServer(server.getId(), user.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AUserInAServer loadUser(Member member) {
|
||||||
|
return this.loadUser(member.getGuild().getIdLong(), member.getIdLong());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AUserInAServer createUserInServer(Member member) {
|
||||||
|
return this.createUserInServer(member.getGuild().getIdLong(), member.getIdLong());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AUserInAServer createUserInServer(Long guildId, Long userId) {
|
||||||
|
AUserInAServer aUserInAServer = serverManagementService.addUserToServer(guildId, userId);
|
||||||
|
userInServerRepository.save(aUserInAServer);
|
||||||
|
return aUserInAServer;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
package dev.sheldan.abstracto.core.service.management;
|
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.AUser;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
|
||||||
import dev.sheldan.abstracto.core.repository.UserInServerRepository;
|
|
||||||
import dev.sheldan.abstracto.core.repository.UserRepository;
|
import dev.sheldan.abstracto.core.repository.UserRepository;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.Member;
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
@@ -14,57 +11,12 @@ import org.springframework.stereotype.Component;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class UserManagementServiceBean implements UserManagementService {
|
public class UserManagementServiceBean implements UserManagementService {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UserInServerRepository userInServerRepository;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserRepository userRepository;
|
private UserRepository userRepository;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ServerManagementService serverManagementService;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AUserInAServer loadUser(Long serverId, Long userId) {
|
|
||||||
AUser user = this.loadUser(userId);
|
|
||||||
AServer server = serverManagementService.loadOrCreate(serverId);
|
|
||||||
return loadUser(server, user);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AUserInAServer loadUser(AServer server, AUser user) {
|
|
||||||
if(userInServerRepository.existsByServerReferenceAndUserReference(server, user)) {
|
|
||||||
return userInServerRepository.findByServerReferenceAndUserReference(server, user);
|
|
||||||
} else {
|
|
||||||
return this.createUserInServer(server.getId(), user.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AUserInAServer loadUser(Member member) {
|
|
||||||
return this.loadUser(member.getGuild().getIdLong(), member.getIdLong());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AUserInAServer loadUserInServer(Long userInServerId) {
|
|
||||||
return userInServerRepository.getOne(userInServerId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AUserInAServer createUserInServer(Member member) {
|
|
||||||
return this.createUserInServer(member.getGuild().getIdLong(), member.getIdLong());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AUserInAServer createUserInServer(Long guildId, Long userId) {
|
|
||||||
AUserInAServer aUserInAServer = serverManagementService.addUserToServer(guildId, userId);
|
|
||||||
userInServerRepository.save(aUserInAServer);
|
|
||||||
return aUserInAServer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AUser createUser(Member member) {
|
public AUser createUser(Member member) {
|
||||||
return createUser(member.getIdLong());
|
return createUser(member.getIdLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -7,11 +7,19 @@ spring.jpa.show-sql = false
|
|||||||
spring.jpa.hibernate.ddl-auto = update
|
spring.jpa.hibernate.ddl-auto = update
|
||||||
spring.jpa.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
|
spring.jpa.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
|
||||||
spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy
|
spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy
|
||||||
|
spring.jpa.properties.hibernate.format_sql = false
|
||||||
log4j.logger.org.hibernate.SQL=info
|
log4j.logger.org.hibernate.SQL=info
|
||||||
log4j.logger.org.hibernate.type.descriptor.sql=trace
|
log4j.logger.org.hibernate.type.descriptor.sql=trace
|
||||||
log4j.logger.org.hibernate.type=trace
|
log4j.logger.org.hibernate.type=trace
|
||||||
|
|
||||||
|
spring.jpa.properties.hibernate.generate_statistics = false
|
||||||
|
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
|
||||||
|
spring.jpa.properties.hibernate.cache.use_query_cache=true
|
||||||
|
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
|
||||||
|
spring.jpa.properties.javax.persistence.sharedCache.mode=ENABLE_SELECTIVE
|
||||||
|
spring.jpa.properties.hibernate.javax.cache.missing_cache_strategy = create
|
||||||
|
spring.cache.jcache.config=classpath:ehcache.xml
|
||||||
|
|
||||||
logging.level.dev.sheldan=info
|
logging.level.dev.sheldan=info
|
||||||
|
|
||||||
spring.cache.cache-names=messages
|
|
||||||
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<config
|
||||||
|
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
|
||||||
|
xmlns='http://www.ehcache.org/v3'
|
||||||
|
xsi:schemaLocation="
|
||||||
|
http://www.ehcache.org/v3
|
||||||
|
http://www.ehcache.org/schema/ehcache-core-3.8-1.xsd">
|
||||||
|
<cache uses-template="default" alias="messages">
|
||||||
|
<key-type>java.lang.String</key-type>
|
||||||
|
<value-type>java.util.concurrent.CompletableFuture</value-type>
|
||||||
|
<expiry>
|
||||||
|
<ttl unit="seconds">600</ttl>
|
||||||
|
</expiry>
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<heap unit="entries">500</heap>
|
||||||
|
</resources>
|
||||||
|
</cache>
|
||||||
|
<cache-template name="default">
|
||||||
|
<expiry>
|
||||||
|
<ttl unit="seconds">600</ttl>
|
||||||
|
</expiry>
|
||||||
|
<resources>
|
||||||
|
<heap>50</heap>
|
||||||
|
</resources>
|
||||||
|
</cache-template>
|
||||||
|
</config>
|
||||||
@@ -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.command.models.FeatureDisabledMessage;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||||
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
||||||
import dev.sheldan.abstracto.core.service.management.FeatureFlagManagementService;
|
|
||||||
import dev.sheldan.abstracto.templating.service.TemplateService;
|
import dev.sheldan.abstracto.templating.service.TemplateService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -13,9 +12,6 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
public class FeatureEnabledCondition implements CommandCondition {
|
public class FeatureEnabledCondition implements CommandCondition {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private FeatureFlagManagementService featureFlagManagementService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private TemplateService templateService;
|
private TemplateService templateService;
|
||||||
|
|
||||||
@@ -28,12 +24,14 @@ public class FeatureEnabledCondition implements CommandCondition {
|
|||||||
boolean featureFlagValue = true;
|
boolean featureFlagValue = true;
|
||||||
String reason = "";
|
String reason = "";
|
||||||
if(feature != null) {
|
if(feature != null) {
|
||||||
featureFlagValue = featureFlagManagementService.getFeatureFlagValue(feature, context.getGuild().getIdLong());
|
featureFlagValue = featureFlagService.getFeatureFlagValue(feature, context.getGuild().getIdLong());
|
||||||
FeatureDisabledMessage featureDisabledMessage = FeatureDisabledMessage
|
if(!featureFlagValue) {
|
||||||
.builder()
|
FeatureDisabledMessage featureDisabledMessage = FeatureDisabledMessage
|
||||||
.featureConfig(featureFlagService.getFeatureDisplayForFeature(feature))
|
.builder()
|
||||||
.build();
|
.featureConfig(featureFlagService.getFeatureDisplayForFeature(feature))
|
||||||
reason = templateService.renderTemplate("feature_disabled_message", featureDisabledMessage);
|
.build();
|
||||||
|
reason = templateService.renderTemplate("feature_disabled_message", featureDisabledMessage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ConditionResult.builder().reason(reason).result(featureFlagValue).build();
|
return ConditionResult.builder().reason(reason).result(featureFlagValue).build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package dev.sheldan.abstracto.core.command.exception;
|
package dev.sheldan.abstracto.core.command.exception;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.templating.Templatable;
|
|
||||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||||
|
import dev.sheldan.abstracto.templating.Templatable;
|
||||||
|
|
||||||
public class CommandNotFound extends AbstractoRunTimeException implements Templatable {
|
public class CommandNotFound extends AbstractoRunTimeException implements Templatable {
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package dev.sheldan.abstracto.core.command.exception;
|
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.core.command.Command;
|
||||||
import dev.sheldan.abstracto.templating.Templatable;
|
import dev.sheldan.abstracto.templating.Templatable;
|
||||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package dev.sheldan.abstracto.core.command.exception;
|
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.core.command.Command;
|
||||||
import dev.sheldan.abstracto.templating.Templatable;
|
import dev.sheldan.abstracto.templating.Templatable;
|
||||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
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 dev.sheldan.abstracto.core.models.database.AFeature;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "command")
|
@Table(name = "command")
|
||||||
@@ -11,6 +13,8 @@ import javax.persistence.*;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class ACommand {
|
public class ACommand {
|
||||||
@Id
|
@Id
|
||||||
@Column(name = "id")
|
@Column(name = "id")
|
||||||
@@ -31,4 +35,19 @@ public class ACommand {
|
|||||||
@JoinColumn(name = "feature_id", nullable = false)
|
@JoinColumn(name = "feature_id", nullable = false)
|
||||||
private AFeature feature;
|
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.ARole;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Getter
|
@Getter
|
||||||
@@ -13,6 +15,8 @@ import java.util.List;
|
|||||||
@Setter
|
@Setter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class ACommandInAServer {
|
public class ACommandInAServer {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -30,11 +34,13 @@ public class ACommandInAServer {
|
|||||||
@ManyToMany(fetch = FetchType.LAZY)
|
@ManyToMany(fetch = FetchType.LAZY)
|
||||||
@Getter
|
@Getter
|
||||||
@JoinColumn(name = "allowed_role_id")
|
@JoinColumn(name = "allowed_role_id")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<ARole> allowedRoles;
|
private List<ARole> allowedRoles;
|
||||||
|
|
||||||
@ManyToMany(fetch = FetchType.LAZY)
|
@ManyToMany(fetch = FetchType.LAZY)
|
||||||
@Getter
|
@Getter
|
||||||
@JoinColumn(name = "immune_role_id")
|
@JoinColumn(name = "immune_role_id")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<ARole> immuneRoles;
|
private List<ARole> immuneRoles;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@@ -42,7 +48,23 @@ public class ACommandInAServer {
|
|||||||
@Column
|
@Column
|
||||||
private Boolean restricted;
|
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.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "module")
|
@Table(name = "module")
|
||||||
@@ -15,6 +17,8 @@ import java.util.List;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AModule {
|
public class AModule {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -30,5 +34,21 @@ public class AModule {
|
|||||||
orphanRemoval = true)
|
orphanRemoval = true)
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
@JoinColumn(name = "module_id")
|
@JoinColumn(name = "module_id")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<ACommand> commands = new ArrayList<>();
|
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.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@Builder
|
@Builder
|
||||||
public class CachedMessage {
|
public class CachedMessage implements Serializable {
|
||||||
private Long serverId;
|
private Long serverId;
|
||||||
private Long channelId;
|
private Long channelId;
|
||||||
private Long messageId;
|
private Long messageId;
|
||||||
|
|||||||
@@ -3,15 +3,19 @@ package dev.sheldan.abstracto.core.models.database;
|
|||||||
import dev.sheldan.abstracto.core.models.SnowFlake;
|
import dev.sheldan.abstracto.core.models.SnowFlake;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import net.dv8tion.jda.api.entities.ChannelType;
|
import net.dv8tion.jda.api.entities.ChannelType;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="channel")
|
@Table(name="channel")
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AChannel implements SnowFlake {
|
public class AChannel implements SnowFlake {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -21,6 +25,7 @@ public class AChannel implements SnowFlake {
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ManyToMany(mappedBy = "channels")
|
@ManyToMany(mappedBy = "channels")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<AChannelGroup> groups;
|
private List<AChannelGroup> groups;
|
||||||
|
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
@@ -47,4 +52,21 @@ public class AChannel implements SnowFlake {
|
|||||||
default: return AChannelType.UNKOWN;
|
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;
|
package dev.sheldan.abstracto.core.models.database;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="channelGroup")
|
@Table(name="channelGroup")
|
||||||
@@ -11,6 +13,8 @@ import java.util.List;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AChannelGroup {
|
public class AChannelGroup {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -32,7 +36,22 @@ public class AChannelGroup {
|
|||||||
name = "channel_in_group",
|
name = "channel_in_group",
|
||||||
joinColumns = @JoinColumn(name = "group_id"),
|
joinColumns = @JoinColumn(name = "group_id"),
|
||||||
inverseJoinColumns = @JoinColumn(name = "channel_id"))
|
inverseJoinColumns = @JoinColumn(name = "channel_id"))
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<AChannel> channels;
|
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 dev.sheldan.abstracto.core.command.models.database.ACommand;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "channel_group_command")
|
@Table(name = "channel_group_command")
|
||||||
@@ -11,6 +13,8 @@ import javax.persistence.*;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AChannelGroupCommand {
|
public class AChannelGroupCommand {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -30,4 +34,19 @@ public class AChannelGroupCommand {
|
|||||||
@Setter
|
@Setter
|
||||||
private Boolean enabled;
|
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;
|
package dev.sheldan.abstracto.core.models.database;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="systemConfig")
|
@Table(name="systemConfig")
|
||||||
@@ -10,6 +12,8 @@ import javax.persistence.*;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AConfig {
|
public class AConfig {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -32,4 +36,21 @@ public class AConfig {
|
|||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
private AServer server;
|
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;
|
package dev.sheldan.abstracto.core.models.database;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "emote")
|
@Table(name = "emote")
|
||||||
@@ -10,6 +12,8 @@ import javax.persistence.*;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AEmote {
|
public class AEmote {
|
||||||
|
|
||||||
@javax.persistence.Id
|
@javax.persistence.Id
|
||||||
@@ -39,5 +43,22 @@ public class AEmote {
|
|||||||
@JoinColumn(name = "emote_server_id", nullable = false)
|
@JoinColumn(name = "emote_server_id", nullable = false)
|
||||||
private AServer serverRef;
|
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.command.models.database.ACommand;
|
||||||
import dev.sheldan.abstracto.core.models.SnowFlake;
|
import dev.sheldan.abstracto.core.models.SnowFlake;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="feature")
|
@Table(name="feature")
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AFeature implements SnowFlake {
|
public class AFeature implements SnowFlake {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -28,6 +32,21 @@ public class AFeature implements SnowFlake {
|
|||||||
@Setter
|
@Setter
|
||||||
@OneToMany
|
@OneToMany
|
||||||
@JoinColumn(name = "feature_id")
|
@JoinColumn(name = "feature_id")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<ACommand> commands;
|
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;
|
package dev.sheldan.abstracto.core.models.database;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="feature_flag")
|
@Table(name="feature_flag")
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AFeatureFlag {
|
public class AFeatureFlag {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -32,4 +36,20 @@ public class AFeatureFlag {
|
|||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
private boolean enabled;
|
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 dev.sheldan.abstracto.core.models.SnowFlake;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="role")
|
@Table(name="role")
|
||||||
@Builder
|
@Builder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class ARole implements SnowFlake, Serializable {
|
public class ARole implements SnowFlake, Serializable {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -28,4 +32,18 @@ public class ARole implements SnowFlake, Serializable {
|
|||||||
@Setter
|
@Setter
|
||||||
private Boolean deleted;
|
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 dev.sheldan.abstracto.core.models.SnowFlake;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "server")
|
@Table(name = "server")
|
||||||
@@ -14,6 +16,8 @@ import java.util.List;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AServer implements SnowFlake, Serializable {
|
public class AServer implements SnowFlake, Serializable {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -27,6 +31,7 @@ public class AServer implements SnowFlake, Serializable {
|
|||||||
orphanRemoval = true)
|
orphanRemoval = true)
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
@JoinColumn(name = "role_server_id")
|
@JoinColumn(name = "role_server_id")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<ARole> roles = new ArrayList<>();
|
private List<ARole> roles = new ArrayList<>();
|
||||||
|
|
||||||
@OneToMany(
|
@OneToMany(
|
||||||
@@ -35,6 +40,7 @@ public class AServer implements SnowFlake, Serializable {
|
|||||||
orphanRemoval = true)
|
orphanRemoval = true)
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
@JoinColumn(name = "server_id")
|
@JoinColumn(name = "server_id")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<AChannel> channels = new ArrayList<>();
|
private List<AChannel> channels = new ArrayList<>();
|
||||||
|
|
||||||
@OneToMany(
|
@OneToMany(
|
||||||
@@ -43,6 +49,7 @@ public class AServer implements SnowFlake, Serializable {
|
|||||||
orphanRemoval = true)
|
orphanRemoval = true)
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
@JoinColumn(name = "group_server")
|
@JoinColumn(name = "group_server")
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<AChannelGroup> channelGroups = new ArrayList<>();
|
private List<AChannelGroup> channelGroups = new ArrayList<>();
|
||||||
|
|
||||||
@OneToMany(
|
@OneToMany(
|
||||||
@@ -51,6 +58,7 @@ public class AServer implements SnowFlake, Serializable {
|
|||||||
orphanRemoval = true)
|
orphanRemoval = true)
|
||||||
@JoinColumn(name = "serverReference")
|
@JoinColumn(name = "serverReference")
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<AUserInAServer> users = new ArrayList<>();
|
private List<AUserInAServer> users = new ArrayList<>();
|
||||||
|
|
||||||
@OneToMany(
|
@OneToMany(
|
||||||
@@ -59,8 +67,26 @@ public class AServer implements SnowFlake, Serializable {
|
|||||||
orphanRemoval = true)
|
orphanRemoval = true)
|
||||||
@JoinColumn(name = "emote_server_id")
|
@JoinColumn(name = "emote_server_id")
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<AEmote> emotes = new ArrayList<>();
|
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;
|
package dev.sheldan.abstracto.core.models.database;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="users")
|
@Table(name="users")
|
||||||
@@ -11,6 +13,8 @@ import java.util.List;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AUser {
|
public class AUser {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -19,5 +23,20 @@ public class AUser {
|
|||||||
@OneToMany(
|
@OneToMany(
|
||||||
fetch = FetchType.LAZY,
|
fetch = FetchType.LAZY,
|
||||||
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
private List<AUserInAServer> servers;
|
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;
|
package dev.sheldan.abstracto.core.models.database;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Getter
|
@Getter
|
||||||
@@ -11,6 +13,8 @@ import java.io.Serializable;
|
|||||||
@Setter
|
@Setter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class AUserInAServer implements Serializable {
|
public class AUserInAServer implements Serializable {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -24,4 +28,19 @@ public class AUserInAServer implements Serializable {
|
|||||||
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||||
@JoinColumn(name = "serverReference", nullable = false)
|
@JoinColumn(name = "serverReference", nullable = false)
|
||||||
private AServer serverReference;
|
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;
|
package dev.sheldan.abstracto.core.models.database;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name="posttarget")
|
@Table(name="posttarget")
|
||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
@Cacheable
|
||||||
|
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||||
public class PostTarget {
|
public class PostTarget {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@@ -29,4 +33,19 @@ public class PostTarget {
|
|||||||
@Getter @Setter
|
@Getter @Setter
|
||||||
private AServer serverReference;
|
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 getDoubleValue(String name, Long serverId, Double defaultValue);
|
Double getDoubleValue(String name, Long serverId, Double defaultValue);
|
||||||
String getStringValue(String name, Long serverId, String 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 setDoubleValue(String name, Long serverId, Double value);
|
||||||
void setStringValue(String name, Long serverId, String 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.FeatureConfig;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -20,4 +21,8 @@ public interface FeatureFlagService {
|
|||||||
boolean doesFeatureExist(FeatureConfig name);
|
boolean doesFeatureExist(FeatureConfig name);
|
||||||
List<String> getFeaturesAsList();
|
List<String> getFeaturesAsList();
|
||||||
FeatureEnum getFeatureEnum(String key);
|
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;
|
package dev.sheldan.abstracto.core.service;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
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 dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import net.dv8tion.jda.api.entities.Member;
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
import net.dv8tion.jda.api.entities.Role;
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
@@ -10,8 +11,8 @@ import java.util.List;
|
|||||||
public interface RoleService {
|
public interface RoleService {
|
||||||
void addRoleToUser(AUserInAServer aUserInAServer, ARole role);
|
void addRoleToUser(AUserInAServer aUserInAServer, ARole role);
|
||||||
void removeRoleFromUser(AUserInAServer aUserInAServer, ARole role);
|
void removeRoleFromUser(AUserInAServer aUserInAServer, ARole role);
|
||||||
void markDeleted(Role role);
|
void markDeleted(Role role, AServer server);
|
||||||
void markDeleted(Long id);
|
void markDeleted(Long id, AServer server);
|
||||||
Role getRoleFromGuild(ARole role);
|
Role getRoleFromGuild(ARole role);
|
||||||
List<Role> getRolesFromGuild(List<ARole> roles);
|
List<Role> getRolesFromGuild(List<ARole> roles);
|
||||||
boolean memberHasRole(Member member, Role role);
|
boolean memberHasRole(Member member, Role role);
|
||||||
|
|||||||
@@ -7,6 +7,6 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
|||||||
public interface ChannelManagementService {
|
public interface ChannelManagementService {
|
||||||
AChannel loadChannel(Long id);
|
AChannel loadChannel(Long id);
|
||||||
AChannel createChannel(Long id, AChannelType type, AServer server);
|
AChannel createChannel(Long id, AChannelType type, AServer server);
|
||||||
void markAsDeleted(Long id);
|
AChannel markAsDeleted(Long id);
|
||||||
void removeChannel(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;
|
import dev.sheldan.abstracto.core.models.database.AConfig;
|
||||||
|
|
||||||
public interface ConfigManagementService {
|
public interface ConfigManagementService {
|
||||||
void setOrCreateStringValue(Long serverId, String name, String value);
|
AConfig setOrCreateStringValue(Long serverId, String name, String value);
|
||||||
void setOrCreateDoubleValue(Long serverId, String name, Double value);
|
AConfig setOrCreateDoubleValue(Long serverId, String name, Double value);
|
||||||
AConfig createConfig(Long serverId, String name, String value);
|
AConfig createConfig(Long serverId, String name, String value);
|
||||||
AConfig createConfig(Long serverId, String name, Double value);
|
AConfig createConfig(Long serverId, String name, Double value);
|
||||||
AConfig createIfNotExists(Long serverId, String name, String value);
|
AConfig createIfNotExists(Long serverId, String name, String value);
|
||||||
AConfig createIfNotExists(Long serverId, String name, Double value);
|
AConfig createIfNotExists(Long serverId, String name, Double value);
|
||||||
AConfig loadConfig(Long serverId, String name);
|
AConfig loadConfig(Long serverId, String name);
|
||||||
boolean configExists(Long serverId, String name);
|
boolean configExists(Long serverId, String name);
|
||||||
void setDoubleValue(Long serverId, String name, Double value);
|
AConfig setDoubleValue(Long serverId, String name, Double value);
|
||||||
void setStringValue(Long serverId, String name, String value);
|
AConfig setStringValue(Long serverId, String name, String value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,4 @@ public interface EmoteManagementService {
|
|||||||
AEmote setEmoteToDefaultEmote(String name, String emoteKey, Long serverId) ;
|
AEmote setEmoteToDefaultEmote(String name, String emoteKey, Long serverId) ;
|
||||||
boolean emoteExists(String name, Long serverId);
|
boolean emoteExists(String name, Long serverId);
|
||||||
boolean emoteExists(String name, AServer server);
|
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;
|
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.AFeature;
|
||||||
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public interface FeatureFlagManagementService {
|
public interface FeatureFlagManagementService {
|
||||||
void createFeatureFlag(AFeature feature, Long serverId, Boolean newValue);
|
AFeatureFlag createFeatureFlag(AFeature feature, Long serverId, Boolean newValue);
|
||||||
void createFeatureFlag(AFeature feature, AServer server, Boolean newValue);
|
AFeatureFlag createFeatureFlag(AFeature feature, AServer server, Boolean newValue);
|
||||||
boolean getFeatureFlagValue(FeatureEnum key, Long serverId);
|
AFeatureFlag getFeatureFlag(AFeature key, Long serverId);
|
||||||
boolean getFeatureFlagValue(FeatureEnum key, AServer server);
|
AFeatureFlag getFeatureFlag(AFeature 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);
|
|
||||||
List<AFeatureFlag> getFeatureFlagsOfServer(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;
|
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
||||||
|
|
||||||
public interface PostTargetManagement {
|
public interface PostTargetManagement {
|
||||||
void createPostTarget(String name, AServer server, AChannel targetChanel);
|
PostTarget createPostTarget(String name, AServer server, AChannel targetChanel);
|
||||||
void createOrUpdate(String name, AServer server, AChannel targetChannel);
|
PostTarget createOrUpdate(String name, AServer server, AChannel targetChannel);
|
||||||
void createOrUpdate(String name, AServer server, Long channelId);
|
PostTarget createOrUpdate(String name, AServer server, Long channelId);
|
||||||
void createOrUpdate(String name, Long serverId, Long channelId);
|
PostTarget createOrUpdate(String name, Long serverId, Long channelId);
|
||||||
PostTarget getPostTarget(String name, AServer server);
|
PostTarget getPostTarget(String name, AServer server);
|
||||||
PostTarget getPostTarget(String name, Long serverId);
|
PostTarget getPostTarget(String name, Long serverId);
|
||||||
void updatePostTarget(PostTarget target, AServer server, AChannel newTargetChannel);
|
PostTarget updatePostTarget(PostTarget target, AServer server, AChannel newTargetChannel);
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user