mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-14 11:48:16 +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) {
|
||||
Integer level = (Integer) commandContext.getParameters().getParameters().get(0);
|
||||
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();
|
||||
if(!roleService.isRoleInServer(role)) {
|
||||
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.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.service.ConfigService;
|
||||
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -19,13 +20,13 @@ public class ExperienceConfigListener implements ServerConfigListener {
|
||||
private ExperienceConfig experienceConfig;
|
||||
|
||||
@Autowired
|
||||
private ConfigService service;
|
||||
private ConfigManagementService service;
|
||||
|
||||
@Override
|
||||
public void updateServerConfig(AServer server) {
|
||||
log.info("Setting up experience configuration for server {}.", server.getId());
|
||||
service.createDoubleValueIfNotExist("minExp", server.getId(), experienceConfig.getMinExp().doubleValue());
|
||||
service.createDoubleValueIfNotExist("maxExp", server.getId(), experienceConfig.getMaxExp().doubleValue());
|
||||
service.createDoubleValueIfNotExist("expMultiplier", server.getId(), experienceConfig.getExpMultiplier().doubleValue());
|
||||
service.createIfNotExists(server.getId(), "minExp", experienceConfig.getMinExp().doubleValue());
|
||||
service.createIfNotExists(server.getId(), "maxExp", experienceConfig.getMaxExp().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.listener.MessageReceivedListener;
|
||||
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.service.AUserExperienceService;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
@@ -23,12 +23,12 @@ public class ExperienceTrackerListener implements MessageReceivedListener {
|
||||
private AUserExperienceService userExperienceService;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||
public void execute(Message message) {
|
||||
AUserInAServer cause = userManagementService.loadUser(message.getMember());
|
||||
AUserInAServer cause = userInServerManagementService.loadUser(message.getMember());
|
||||
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.AExperienceRole;
|
||||
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;
|
||||
|
||||
/**
|
||||
@@ -20,6 +22,7 @@ public interface ExperienceRoleRepository extends JpaRepository<AExperienceRole,
|
||||
* @param role The {@link ARole} to filter for
|
||||
* @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);
|
||||
|
||||
/**
|
||||
@@ -29,6 +32,7 @@ public interface ExperienceRoleRepository extends JpaRepository<AExperienceRole,
|
||||
* @param server The {@link AServer} to search for
|
||||
* @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);
|
||||
|
||||
/**
|
||||
@@ -36,5 +40,6 @@ public interface ExperienceRoleRepository extends JpaRepository<AExperienceRole,
|
||||
* @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}
|
||||
*/
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
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.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
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
|
||||
* @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);
|
||||
|
||||
/**
|
||||
@@ -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
|
||||
* configuration
|
||||
*/
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
List<AUserExperience> findTop10ByUser_ServerReferenceOrderByExperienceDesc(AServer server, Pageable pageable);
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
package dev.sheldan.abstracto.experience.models.database;
|
||||
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.Cacheable;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 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")
|
||||
@Getter
|
||||
@Setter
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class AExperienceLevel implements Serializable {
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
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.AServer;
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 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")
|
||||
@Getter
|
||||
@Setter
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class AExperienceRole implements Serializable {
|
||||
|
||||
/**
|
||||
@@ -58,5 +62,23 @@ public class AExperienceRole implements Serializable {
|
||||
@OneToMany(fetch = FetchType.LAZY)
|
||||
@Builder.Default
|
||||
@JoinColumn(name = "experience_role_id")
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
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 lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
/**
|
||||
@@ -18,6 +20,8 @@ import java.io.Serializable;
|
||||
@Table(name = "user_experience")
|
||||
@Getter
|
||||
@Setter
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class AUserExperience implements Serializable {
|
||||
|
||||
/**
|
||||
@@ -53,4 +57,22 @@ public class AUserExperience implements Serializable {
|
||||
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
|
||||
@JoinColumn(name = "experience_role_id")
|
||||
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());
|
||||
MessageDeletedLog logModel = (MessageDeletedLog) contextUtils.fromMessage(messageFromCache, MessageDeletedLog.class);
|
||||
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);
|
||||
postTargetService.sendEmbedInPostTarget(message, DELETE_LOG_TARGET, messageFromCache.getServerId());
|
||||
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.moderation.models.database.Mute;
|
||||
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;
|
||||
|
||||
@Repository
|
||||
public interface MuteRepository extends JpaRepository<Mute, Long> {
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
boolean existsByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
Mute findTopByMutedUserAndMuteEndedFalse(AUserInAServer userInAServer);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
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.moderation.models.database.MuteRole;
|
||||
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;
|
||||
|
||||
@Repository
|
||||
public interface MuteRoleRepository extends JpaRepository<MuteRole, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
MuteRole findByRoleServer(AServer server);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
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.moderation.models.database.Warning;
|
||||
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.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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.service.*;
|
||||
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.models.database.Mute;
|
||||
import dev.sheldan.abstracto.moderation.models.database.MuteRole;
|
||||
@@ -48,7 +48,7 @@ public class MuteServiceBean implements MuteService {
|
||||
private RoleService roleService;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
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) {
|
||||
FullUser mutedUser = FullUser
|
||||
.builder()
|
||||
.aUserInAServer(userManagementService.loadUser(memberToMute))
|
||||
.aUserInAServer(userInServerManagementService.loadUser(memberToMute))
|
||||
.member(memberToMute)
|
||||
.build();
|
||||
|
||||
FullUser mutingUser = FullUser
|
||||
.builder()
|
||||
.aUserInAServer(userManagementService.loadUser(mutingMember))
|
||||
.aUserInAServer(userInServerManagementService.loadUser(mutingMember))
|
||||
.member(mutingMember)
|
||||
.build();
|
||||
return muteUser(mutedUser, mutingUser, reason, unmuteDate, message);
|
||||
@@ -264,6 +264,6 @@ public class MuteServiceBean implements MuteService {
|
||||
|
||||
@Override
|
||||
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.database.Warning;
|
||||
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.service.BotService;
|
||||
import dev.sheldan.abstracto.core.service.PostTargetService;
|
||||
@@ -35,7 +35,7 @@ public class WarnServiceBean implements WarnService {
|
||||
public static final String WARN_LOG_TARGET = "warnLog";
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
private WarnManagementService warnManagementService;
|
||||
@@ -78,13 +78,13 @@ public class WarnServiceBean implements WarnService {
|
||||
public Warning warnUser(Member warnedMember, Member warningMember, String reason, TextChannel feedbackChannel) {
|
||||
FullUser warnedUser = FullUser
|
||||
.builder()
|
||||
.aUserInAServer(userManagementService.loadUser(warnedMember))
|
||||
.aUserInAServer(userInServerManagementService.loadUser(warnedMember))
|
||||
.member(warnedMember)
|
||||
.build();
|
||||
|
||||
FullUser warningUser = FullUser
|
||||
.builder()
|
||||
.aUserInAServer(userManagementService.loadUser(warningMember))
|
||||
.aUserInAServer(userInServerManagementService.loadUser(warningMember))
|
||||
.member(warningMember)
|
||||
.build();
|
||||
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.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.repository.MuteRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -21,7 +21,7 @@ public class MuteManagementServiceBean implements MuteManagementService {
|
||||
private MuteRepository muteRepository;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Override
|
||||
public Mute createMute(AUserInAServer aUserInAServer, AUserInAServer mutingUser, String reason, Instant unmuteDate, AServerAChannelMessage origin) {
|
||||
@@ -66,7 +66,7 @@ public class MuteManagementServiceBean implements MuteManagementService {
|
||||
|
||||
@Override
|
||||
public Mute getAMuteOf(Member userInAServer) {
|
||||
return getAMuteOf(userManagementService.loadUser(userInAServer));
|
||||
return getAMuteOf(userInServerManagementService.loadUser(userInAServer));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,6 +7,7 @@ import lombok.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.time.Instant;
|
||||
import java.util.Objects;
|
||||
|
||||
@Entity
|
||||
@Table(name="mute")
|
||||
@@ -50,5 +51,26 @@ public class Mute {
|
||||
|
||||
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 javax.persistence.*;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Represents a role to be used for muting users on a certain server
|
||||
@@ -40,4 +41,19 @@ public class MuteRole {
|
||||
@OneToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "role_id", nullable = false)
|
||||
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 java.time.Instant;
|
||||
import java.util.Objects;
|
||||
|
||||
@Entity
|
||||
@Table(name="warning")
|
||||
@@ -42,5 +43,22 @@ public class Warning {
|
||||
@Setter
|
||||
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.database.AUserInAServer;
|
||||
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.config.features.UtilityFeature;
|
||||
import dev.sheldan.abstracto.utility.service.MessageEmbedService;
|
||||
@@ -25,10 +25,8 @@ public class MessageEmbedListener implements MessageReceivedListener {
|
||||
@Autowired
|
||||
private MessageCache messageCache;
|
||||
|
||||
public static final String MESSAGE_EMBED_TEMPLATE = "message";
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
private MessageEmbedService messageEmbedService;
|
||||
@@ -39,9 +37,13 @@ public class MessageEmbedListener implements MessageReceivedListener {
|
||||
List<MessageEmbedLink> links = messageEmbedService.getLinksInMessage(messageRaw);
|
||||
for (MessageEmbedLink messageEmbedLink : links) {
|
||||
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);
|
||||
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()) {
|
||||
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.EmoteService;
|
||||
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.utility.config.features.UtilityFeature;
|
||||
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
|
||||
@@ -51,7 +51,7 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
|
||||
private StarboardPostReactorManagementService starboardPostReactorManagementService;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
private EmoteService emoteService;
|
||||
@@ -81,7 +81,7 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
|
||||
if (userExceptAuthor.size() >= starMinimum) {
|
||||
log.info("Post reached starboard minimum. Message {} in channel {} in server {} will be starred/updated.",
|
||||
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()) {
|
||||
StarboardPost starboardPost = starboardPostOptional.get();
|
||||
starboardPost.setIgnored(false);
|
||||
|
||||
@@ -2,7 +2,12 @@ package dev.sheldan.abstracto.utility.repository;
|
||||
|
||||
import dev.sheldan.abstracto.utility.models.database.EmbeddedMessage;
|
||||
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> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
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.utility.models.database.Reminder;
|
||||
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;
|
||||
|
||||
@Repository
|
||||
public interface ReminderRepository extends JpaRepository<Reminder, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
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 org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
|
||||
import javax.persistence.QueryHint;
|
||||
import java.util.List;
|
||||
|
||||
public interface StarboardPostReactionRepository extends JpaRepository<StarboardPostReaction, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
void deleteByReactorAndStarboardPost(AUser user, StarboardPost post);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
void deleteByStarboardPost(StarboardPost post);
|
||||
|
||||
@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 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;
|
||||
|
||||
@Repository
|
||||
public interface StarboardPostRepository extends JpaRepository<StarboardPost, Long> {
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
StarboardPost findByPostMessageId(Long messageId);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
StarboardPost findByStarboardMessageId(Long messageId);
|
||||
|
||||
@QueryHints(@QueryHint(name = org.hibernate.annotations.QueryHints.CACHEABLE, value = "true"))
|
||||
List<StarboardPost> findByStarboardChannelServerId(Long serverId);
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package dev.sheldan.abstracto.utility.repository;
|
||||
|
||||
import dev.sheldan.abstracto.utility.models.database.Suggestion;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
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.management.ChannelManagementService;
|
||||
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.utility.models.MessageEmbedLink;
|
||||
import dev.sheldan.abstracto.utility.service.management.MessageEmbedPostManagementService;
|
||||
@@ -48,7 +48,7 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
private BotService botService;
|
||||
@@ -128,7 +128,7 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
|
||||
private MessageEmbeddedModel buildTemplateParameter(Message message, CachedMessage embeddedMessage) {
|
||||
AChannel channel = channelManagementService.loadChannel(message.getChannel().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());
|
||||
Optional<TextChannel> textChannelFromServer = botService.getTextChannelFromServer(embeddedMessage.getServerId(), embeddedMessage.getChannelId());
|
||||
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.AServer;
|
||||
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.repository.EmbeddedMessageRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -23,7 +23,7 @@ public class MessageEmbedPostManagementServiceBean implements MessageEmbedPostMa
|
||||
private EmbeddedMessageRepository embeddedMessageRepository;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@@ -32,7 +32,7 @@ public class MessageEmbedPostManagementServiceBean implements MessageEmbedPostMa
|
||||
AChannel embeddedChannel = AChannel.builder().id(embeddedMessage.getChannelId()).build();
|
||||
AServer embeddingServer = AServer.builder().id(messageContainingEmbed.getGuild().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
|
||||
.builder()
|
||||
.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.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.AServer;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
@@ -26,14 +26,14 @@ public class SuggestionManagementServiceBean implements SuggestionManagementServ
|
||||
private ChannelManagementService channelManagementService;
|
||||
|
||||
@Autowired
|
||||
private UserManagementService userManagementService;
|
||||
private UserInServerManagementService userInServerManagementService;
|
||||
|
||||
@Autowired
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Override
|
||||
public Suggestion createSuggestion(Member suggester, String text) {
|
||||
AUserInAServer user = userManagementService.loadUser(suggester);
|
||||
AUserInAServer user = userInServerManagementService.loadUser(suggester);
|
||||
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.AUserInAServer;
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.Objects;
|
||||
|
||||
@Entity
|
||||
@Table(name="embedded_message")
|
||||
@@ -14,6 +16,8 @@ import javax.persistence.*;
|
||||
@NoArgsConstructor
|
||||
@Getter
|
||||
@Setter
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class EmbeddedMessage {
|
||||
|
||||
@Getter
|
||||
@@ -52,4 +56,24 @@ public class EmbeddedMessage {
|
||||
@Column
|
||||
@Id
|
||||
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.AUserInAServer;
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.time.Instant;
|
||||
import java.util.Objects;
|
||||
|
||||
@Entity
|
||||
@Table(name="reminder")
|
||||
@@ -15,6 +17,8 @@ import java.time.Instant;
|
||||
@NoArgsConstructor
|
||||
@Getter
|
||||
@Setter
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class Reminder {
|
||||
|
||||
@Id
|
||||
@@ -52,4 +56,24 @@ public class Reminder {
|
||||
@Getter
|
||||
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.AUser;
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Entity
|
||||
@Table(name="starboard_post")
|
||||
@@ -15,6 +17,8 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@Getter
|
||||
@Setter
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class StarboardPost {
|
||||
|
||||
@Id
|
||||
@@ -52,6 +56,7 @@ public class StarboardPost {
|
||||
orphanRemoval = true,
|
||||
cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||
@JoinColumn(name="postId")
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<StarboardPostReaction> reactions;
|
||||
|
||||
@Column
|
||||
@@ -66,4 +71,26 @@ public class StarboardPost {
|
||||
}
|
||||
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 lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.Objects;
|
||||
|
||||
@Entity
|
||||
@Table(name="starboard_post_reaction")
|
||||
@@ -12,6 +14,8 @@ import javax.persistence.*;
|
||||
@NoArgsConstructor
|
||||
@Getter
|
||||
@Setter
|
||||
@Cacheable
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class StarboardPostReaction {
|
||||
|
||||
@Id
|
||||
@@ -26,4 +30,18 @@ public class StarboardPostReaction {
|
||||
@JoinColumn(name = "postId", nullable = false)
|
||||
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 java.time.Instant;
|
||||
import java.util.Objects;
|
||||
|
||||
@Entity
|
||||
@Table(name="suggestion")
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Getter @Setter
|
||||
@Getter
|
||||
@Setter
|
||||
public class Suggestion {
|
||||
|
||||
@Id
|
||||
@@ -48,4 +50,22 @@ public class Suggestion {
|
||||
@Enumerated(EnumType.STRING)
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user