[AB-197] splitting utility maven module into separate maven modules

aligning some package names
removing some unnecessary computed values from liquibase
This commit is contained in:
Sheldan
2021-03-12 17:29:49 +01:00
parent e2da800d84
commit 2ed456c164
835 changed files with 12790 additions and 3310 deletions

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>suggestion</artifactId>
<groupId>dev.sheldan.abstracto.modules</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>suggestion-int</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>

View File

@@ -0,0 +1,28 @@
package dev.sheldan.abstracto.suggestion.config;
import dev.sheldan.abstracto.core.config.FeatureConfig;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class SuggestionFeature implements FeatureConfig {
@Override
public FeatureDefinition getFeature() {
return SuggestionFeatureDefinition.SUGGEST;
}
@Override
public List<PostTargetEnum> getRequiredPostTargets() {
return Arrays.asList(SuggestionPostTarget.SUGGESTION);
}
@Override
public List<String> getRequiredEmotes() {
return Arrays.asList("suggestionYes", "suggestionNo");
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.suggestion.config;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import lombok.Getter;
@Getter
public enum SuggestionFeatureDefinition implements FeatureDefinition {
SUGGEST("suggestion");
private String key;
SuggestionFeatureDefinition(String key) {
this.key = key;
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.suggestion.config;
import dev.sheldan.abstracto.core.config.PostTargetEnum;
import lombok.Getter;
@Getter
public enum SuggestionPostTarget implements PostTargetEnum {
SUGGESTION("suggestions");
private String key;
SuggestionPostTarget(String key) {
this.key = key;
}
}

View File

@@ -0,0 +1,25 @@
package dev.sheldan.abstracto.suggestion.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
import dev.sheldan.abstracto.suggestion.model.exception.SuggestionNotFoundExceptionModel;
public class SuggestionNotFoundException extends AbstractoRunTimeException implements Templatable {
private final SuggestionNotFoundExceptionModel model;
public SuggestionNotFoundException(Long suggestionId) {
super("Suggestion not found");
this.model = SuggestionNotFoundExceptionModel.builder().suggestionId(suggestionId).build();
}
@Override
public String getTemplateName() {
return "suggestion_does_not_exist_exception";
}
@Override
public Object getTemplateModel() {
return model;
}
}

View File

@@ -0,0 +1,20 @@
package dev.sheldan.abstracto.suggestion.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
public class SuggestionUpdateException extends AbstractoRunTimeException implements Templatable {
public SuggestionUpdateException() {
super("Not possible to update suggestion.");
}
@Override
public String getTemplateName() {
return "suggestion_update_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,62 @@
package dev.sheldan.abstracto.suggestion.model.database;
import dev.sheldan.abstracto.core.models.ServerSpecificId;
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 javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
@Entity
@Table(name="suggestion")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@EqualsAndHashCode
public class Suggestion implements Serializable {
@Id
@Getter
@EmbeddedId
private ServerSpecificId suggestionId;
@Getter
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "suggester_user_in_server_id")
private AUserInAServer suggester;
@Getter
@Column(name = "message_id")
private Long messageId;
@Getter
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "channel_id")
private AChannel channel;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@MapsId("serverId")
@JoinColumn(name = "server_id", referencedColumnName = "id", nullable = false)
private AServer server;
@Getter
@Column(name = "suggestion_date")
private Instant suggestionDate;
@Getter
@Enumerated(EnumType.STRING)
@Column(name = "state")
private SuggestionState state;
@Column(name = "created")
private Instant created;
@Column(name = "updated")
private Instant updated;
}

View File

@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.suggestion.model.database;
public enum SuggestionState {
NEW, ACCEPTED, REJECTED
}

View File

@@ -0,0 +1,12 @@
package dev.sheldan.abstracto.suggestion.model.exception;
import lombok.Builder;
import lombok.Getter;
import java.io.Serializable;
@Getter
@Builder
public class SuggestionNotFoundExceptionModel implements Serializable {
private final Long suggestionId;
}

View File

@@ -0,0 +1,25 @@
package dev.sheldan.abstracto.suggestion.model.template;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
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;
@Getter
@Setter
@SuperBuilder
// TODO change user initiated context so slim context, and remove database entities referenced
public class SuggestionLog extends UserInitiatedServerContext {
private Long suggestionId;
private SuggestionState state;
private Member suggester;
private AUserInAServer suggesterUser;
private String text;
private String reason;
private Long originalMessageId;
private Long originalChannelId;
private String originalMessageUrl;
}

View File

@@ -0,0 +1,12 @@
package dev.sheldan.abstracto.suggestion.service;
import dev.sheldan.abstracto.suggestion.model.template.SuggestionLog;
import net.dv8tion.jda.api.entities.Member;
import java.util.concurrent.CompletableFuture;
public interface SuggestionService {
CompletableFuture<Void> createSuggestionMessage(Member member, String text, SuggestionLog log);
CompletableFuture<Void> acceptSuggestion(Long suggestionId, String text, SuggestionLog log);
CompletableFuture<Void> rejectSuggestion(Long suggestionId, String text, SuggestionLog log);
}

View File

@@ -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.SuggestionState;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import java.util.Optional;
public interface SuggestionManagementService {
Suggestion createSuggestion(Member suggester, String text, Message message, Long suggestionId);
Suggestion createSuggestion(AUserInAServer suggester, String text, Message message, Long suggestionId);
Optional<Suggestion> getSuggestion(Long suggestionId, Long serverId);
void setSuggestionState(Suggestion suggestion, SuggestionState newState);
}