mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-18 21:03:11 +00:00
[AB-268] adding button feature mode to suggestions which allows for hidden suggestion votes
moving gateway metric to separate service in case JDA is not ready yet
This commit is contained in:
@@ -13,6 +13,9 @@ import java.util.List;
|
||||
@Component
|
||||
public class SuggestionFeatureConfig implements FeatureConfig {
|
||||
|
||||
public static final String SUGGESTION_AGREE_EMOTE = "suggestionYes";
|
||||
public static final String SUGGESTION_DISAGREE_EMOTE = "suggestionNo";
|
||||
|
||||
@Override
|
||||
public FeatureDefinition getFeature() {
|
||||
return SuggestionFeatureDefinition.SUGGEST;
|
||||
@@ -25,12 +28,12 @@ public class SuggestionFeatureConfig implements FeatureConfig {
|
||||
|
||||
@Override
|
||||
public List<String> getRequiredEmotes() {
|
||||
return Arrays.asList("suggestionYes", "suggestionNo");
|
||||
return Arrays.asList(SUGGESTION_AGREE_EMOTE, SUGGESTION_DISAGREE_EMOTE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FeatureMode> getAvailableModes() {
|
||||
return Arrays.asList(SuggestionFeatureMode.SUGGESTION_REMINDER);
|
||||
return Arrays.asList(SuggestionFeatureMode.SUGGESTION_REMINDER, SuggestionFeatureMode.SUGGESTION_BUTTONS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,7 +5,7 @@ import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum SuggestionFeatureMode implements FeatureMode {
|
||||
SUGGESTION_REMINDER("suggestionReminder");
|
||||
SUGGESTION_REMINDER("suggestionReminder"), SUGGESTION_BUTTONS("suggestionButton");
|
||||
|
||||
private final String key;
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package dev.sheldan.abstracto.suggestion.model.database;
|
||||
|
||||
public enum SuggestionDecision {
|
||||
AGREE, DISAGREE, REMOVE_VOTE
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package dev.sheldan.abstracto.suggestion.model.database;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.embed.SuggestionVoterId;
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.time.Instant;
|
||||
|
||||
@Entity
|
||||
@Table(name="suggestion_vote")
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Getter
|
||||
@Setter
|
||||
@EqualsAndHashCode
|
||||
public class SuggestionVote {
|
||||
|
||||
@Id
|
||||
@EmbeddedId
|
||||
private SuggestionVoterId suggestionVoteId;
|
||||
|
||||
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY)
|
||||
@MapsId("voterId")
|
||||
@JoinColumn(name = "voter_user_in_server_id", nullable = false)
|
||||
private AUserInAServer voter;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumns(
|
||||
{
|
||||
@JoinColumn(updatable = false, insertable = false, name = "suggestion_id", referencedColumnName = "id"),
|
||||
@JoinColumn(updatable = false, insertable = false, name = "server_id", referencedColumnName = "server_id")
|
||||
})
|
||||
private Suggestion suggestion;
|
||||
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name = "decision", nullable = false)
|
||||
private SuggestionDecision decision;
|
||||
|
||||
@Column(name = "created", nullable = false, insertable = false, updatable = false)
|
||||
private Instant created;
|
||||
|
||||
@Column(name = "updated", insertable = false, updatable = false)
|
||||
private Instant updated;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package dev.sheldan.abstracto.suggestion.model.database.embed;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Embeddable;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Embeddable
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
@EqualsAndHashCode
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SuggestionVoterId implements Serializable {
|
||||
@Column(name = "voter_user_in_server_id")
|
||||
private Long voterId;
|
||||
|
||||
@Column(name = "suggestion_id")
|
||||
private Long suggestionId;
|
||||
|
||||
@Column(name = "server_id")
|
||||
private Long serverId;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.sheldan.abstracto.suggestion.model.template;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.template.button.ButtonPayload;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.SuggestionDecision;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class SuggestionButtonPayload implements ButtonPayload {
|
||||
private Long suggestionId;
|
||||
private Long serverId;
|
||||
private SuggestionDecision decision;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.suggestion.model.template;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class SuggestionInfoModel {
|
||||
private Long agreements;
|
||||
private Long disagreements;
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package dev.sheldan.abstracto.suggestion.model.template;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.models.template.button.ButtonConfigModel;
|
||||
import dev.sheldan.abstracto.core.utils.MessageUtils;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.SuggestionState;
|
||||
import lombok.Getter;
|
||||
@@ -25,6 +26,10 @@ public class SuggestionLog {
|
||||
private Long serverId;
|
||||
private Long originalChannelId;
|
||||
private Long originalMessageId;
|
||||
private Boolean useButtons;
|
||||
private ButtonConfigModel agreeButtonModel;
|
||||
private ButtonConfigModel disAgreeButtonModel;
|
||||
private ButtonConfigModel removeVoteButtonModel;
|
||||
|
||||
public String getOriginalMessageUrl() {
|
||||
return MessageUtils.buildMessageUrl(serverId, originalChannelId , originalMessageId);
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package dev.sheldan.abstracto.suggestion.model.template;
|
||||
|
||||
import dev.sheldan.abstracto.core.utils.MessageUtils;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.SuggestionState;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@SuperBuilder
|
||||
public class SuggestionUpdateModel {
|
||||
private Long suggestionId;
|
||||
private SuggestionState state;
|
||||
private User suggester;
|
||||
private Member member;
|
||||
private String text;
|
||||
private Message message;
|
||||
private String reason;
|
||||
private Long serverId;
|
||||
private Long originalChannelId;
|
||||
private Long originalMessageId;
|
||||
private Long agreeVotes;
|
||||
private Long disAgreeVotes;
|
||||
|
||||
public String getOriginalMessageUrl() {
|
||||
return MessageUtils.buildMessageUrl(serverId, originalChannelId , originalMessageId);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.suggestion.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.Suggestion;
|
||||
import dev.sheldan.abstracto.suggestion.model.template.SuggestionInfoModel;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
@@ -17,4 +18,5 @@ public interface SuggestionService {
|
||||
void cleanUpSuggestions();
|
||||
CompletableFuture<Void> remindAboutSuggestion(ServerSpecificId suggestionId);
|
||||
void cancelSuggestionReminder(Suggestion suggestion);
|
||||
SuggestionInfoModel getSuggestionInfo(Long serverId, Long suggestionId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.suggestion.service;
|
||||
|
||||
import dev.sheldan.abstracto.suggestion.model.database.Suggestion;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.SuggestionDecision;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.SuggestionVote;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
public interface SuggestionVoteService {
|
||||
SuggestionVote upsertSuggestionVote(Member votingMember, SuggestionDecision decision, Long suggestionId);
|
||||
SuggestionVote upsertSuggestionVote(Member votingMember, SuggestionDecision decision, Suggestion suggestion);
|
||||
void deleteSuggestionVote(Member votingMember, Long suggestionId);
|
||||
void deleteSuggestionVote(Member votingMember, Suggestion suggestion);
|
||||
}
|
||||
@@ -20,4 +20,5 @@ public interface SuggestionManagementService {
|
||||
void deleteSuggestion(List<Suggestion> suggestions);
|
||||
void deleteSuggestion(Suggestion suggestion);
|
||||
List<Suggestion> getSuggestionsUpdatedBeforeNotNew(Instant date);
|
||||
Optional<Suggestion> findSuggestionByMessageId(Long messageId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.sheldan.abstracto.suggestion.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.Suggestion;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.SuggestionDecision;
|
||||
import dev.sheldan.abstracto.suggestion.model.database.SuggestionVote;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface SuggestionVoteManagementService {
|
||||
Optional<SuggestionVote> getSuggestionVote(AUserInAServer aUserInAServer, Suggestion suggestion);
|
||||
void deleteSuggestionVote(AUserInAServer aUserInAServer, Suggestion suggestion);
|
||||
SuggestionVote createSuggestionVote(AUserInAServer aUserInAServer, Suggestion suggestion, SuggestionDecision decision);
|
||||
Long getDecisionsForSuggestion(Suggestion suggestion, SuggestionDecision decision);
|
||||
void deleteSuggestionVotes(Suggestion suggestion);
|
||||
}
|
||||
Reference in New Issue
Block a user