mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-14 11:48:16 +00:00
added subscribe and unsubscribe command
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.modmail.exception;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.templating.Templatable;
|
||||
|
||||
public class AlreadySubscribedException extends AbstractoRunTimeException implements Templatable {
|
||||
public AlreadySubscribedException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "modmail_already_subscribed_exception";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.modmail.exception;
|
||||
|
||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||
import dev.sheldan.abstracto.templating.Templatable;
|
||||
|
||||
public class NotSubscribedException extends AbstractoRunTimeException implements Templatable {
|
||||
public NotSubscribedException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTemplateName() {
|
||||
return "modmail_not_subscribed_exception";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTemplateModel() {
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
@@ -55,6 +55,15 @@ public class ModMailThread {
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<ModMailMessage> messages = new ArrayList<>();
|
||||
|
||||
@OneToMany(
|
||||
fetch = FetchType.LAZY,
|
||||
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
|
||||
orphanRemoval = true)
|
||||
@JoinColumn(name = "modMailThread")
|
||||
@Builder.Default
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
private List<ModMailThreadSubscriber> subscribers = new ArrayList<>();
|
||||
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column
|
||||
private ModMailThreadState state;
|
||||
|
||||
@@ -2,15 +2,4 @@ package dev.sheldan.abstracto.modmail.models.database;
|
||||
|
||||
public enum ModMailThreadState {
|
||||
INITIAL, USER_REPLIED, MOD_REPLIED, CLOSED, CLOSING;
|
||||
|
||||
public static ModMailThreadState getState(ModMailThreadState type) {
|
||||
switch (type) {
|
||||
case INITIAL: return ModMailThreadState.INITIAL;
|
||||
case USER_REPLIED: return ModMailThreadState.USER_REPLIED;
|
||||
case CLOSED: return ModMailThreadState.CLOSED;
|
||||
case CLOSING: return ModMailThreadState.CLOSING;
|
||||
default:
|
||||
case MOD_REPLIED: return ModMailThreadState.MOD_REPLIED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package dev.sheldan.abstracto.modmail.models.database;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import lombok.*;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
@Builder
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Table(name = "modmail_subscribers")
|
||||
@Cacheable
|
||||
@Getter
|
||||
@Setter
|
||||
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
|
||||
public class ModMailThreadSubscriber {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long subscriberId;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "modmail_message_subscriber", nullable = false)
|
||||
private AUserInAServer subscriber;
|
||||
|
||||
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||
@JoinColumn(name = "modMailThread", nullable = false)
|
||||
private ModMailThread threadReference;
|
||||
}
|
||||
@@ -7,6 +7,8 @@ import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
@@ -14,4 +16,5 @@ public class ModMailUserReplyModel {
|
||||
private FullUser threadUser;
|
||||
private Message postedMessage;
|
||||
private ModMailThread modMailThread;
|
||||
private List<FullUser> subscribers;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.sheldan.abstracto.modmail.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
||||
|
||||
public interface ModMailSubscriptionService {
|
||||
void subscribeToThread(AUserInAServer aUserInAServer, ModMailThread modMailThread);
|
||||
void unsubscribeFromThread(AUserInAServer aUserInAServer, ModMailThread modMailThread);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.modmail.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThreadSubscriber;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ModMailSubscriberManagementService {
|
||||
List<ModMailThreadSubscriber> getSubscribersForThread(ModMailThread modMailThread);
|
||||
boolean isSubscribedToThread(AUserInAServer aUserInAServer, ModMailThread modMailThread);
|
||||
ModMailThreadSubscriber createSubscriber(AUserInAServer aUserInAServer, ModMailThread modMailThread);
|
||||
void removeSubscriber(AUserInAServer aUserInAServer, ModMailThread modMailThread);
|
||||
}
|
||||
Reference in New Issue
Block a user