added mod mail thread notification, if a user initiates a mod mail thread

added the concept of a mod mail role, these are roles being pinged when a thread is opened, and they also are able to execute mod mail related commands
fixed past thread count in mod mail header
added convenience method to allow a role to execute a whole feature
This commit is contained in:
Sheldan
2020-05-08 10:49:06 +02:00
parent ea6fe240f4
commit 7699075b33
27 changed files with 289 additions and 20 deletions

View File

@@ -0,0 +1,32 @@
package dev.sheldan.abstracto.modmail.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.*;
@Builder
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "modmail_roles")
@Cacheable
@Getter
@Setter
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class ModMailRole {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long modMailRoleId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_role_server", nullable = false)
private AServer server;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modmail_role", nullable = false)
private ARole role;
}

View File

@@ -0,0 +1,20 @@
package dev.sheldan.abstracto.modmail.models.template;
import dev.sheldan.abstracto.core.models.FullUser;
import dev.sheldan.abstracto.core.models.context.ServerContext;
import dev.sheldan.abstracto.modmail.models.database.ModMailRole;
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import java.util.List;
@Getter
@Setter
@SuperBuilder
public class ModMailNotificationModel extends ServerContext {
private ModMailThread modMailThread;
private FullUser threadUser;
private List<ModMailRole> roles;
}

View File

@@ -12,5 +12,5 @@ import lombok.Setter;
public class ModMailThreaderHeader {
private FullUser threadUser;
private ModMailThread latestModMailThread;
private Long pastModMailThreads;
private Long pastModMailThreadCount;
}

View File

@@ -0,0 +1,8 @@
package dev.sheldan.abstracto.modmail.service;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.database.AServer;
public interface ModMailRoleService {
void addRoleToModMailRoles(ARole role, AServer server);
}

View File

@@ -10,7 +10,7 @@ import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageChannel;
public interface ModMailThreadService {
void createModMailThreadForUser(FullUser userInAServer, MessageChannel feedBackChannel);
void createModMailThreadForUser(FullUser userInAServer, MessageChannel feedBackChannel, Boolean userInitiated);
boolean hasOpenThread(AUserInAServer aUserInAServer);
boolean hasOpenThread(AUser user);
void setModMailCategoryTo(AServer server, Long categoryId);

View File

@@ -0,0 +1,13 @@
package dev.sheldan.abstracto.modmail.service.management;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.modmail.models.database.ModMailRole;
import java.util.List;
public interface ModMailRoleManagementService {
void addRoleToModMailRoles(ARole role, AServer server);
List<ModMailRole> getRolesForServer(AServer server);
boolean isRoleAlreadyAssigned(ARole role, AServer server);
}

View File

@@ -17,7 +17,7 @@ public interface ModMailThreadManagementService {
ModMailThread getOpenModmailThreadForUser(AUser user);
List<ModMailThread> getModMailThreadForUser(AUserInAServer aUserInAServer);
ModMailThread getLatestModMailThread(AUserInAServer aUserInAServer);
void createModMailThread(AUserInAServer userInAServer, AChannel channel);
ModMailThread createModMailThread(AUserInAServer userInAServer, AChannel channel);
void setModMailThreadState(ModMailThread modMailThread, ModMailThreadState newState);
}