fixed initial setup for mod mail category

fixed setup for locking
added exception message in case the modmail post target is not defined
This commit is contained in:
Sheldan
2020-05-08 23:22:23 +02:00
parent d1f307837d
commit 271ea7364a
8 changed files with 68 additions and 10 deletions

View File

@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.modmail.service;
import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
import com.jagrosh.jdautilities.menu.ButtonMenu;
import dev.sheldan.abstracto.core.exception.PostTargetException;
import dev.sheldan.abstracto.core.models.FullGuild;
import dev.sheldan.abstracto.core.models.FullUser;
import dev.sheldan.abstracto.core.models.database.*;
@@ -306,7 +307,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
}
@Override
public void closeModMailThread(ModMailThread modMailThread, MessageChannel feedBack, String note, Boolean notifyUser) {
public synchronized void closeModMailThread(ModMailThread modMailThread, MessageChannel feedBack, String note, Boolean notifyUser) {
List<ModMailMessage> modMailMessages = modMailThread.getMessages();
List<CompletableFuture<Message>> messages = modMailMessageService.loadModMailMessages(modMailMessages);
Long modMailThreadId = modMailThread.getId();
@@ -322,13 +323,21 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
if(throwable != null) {
log.warn("Failed to load some mod mail messages for mod mail thread {}. Still trying to post the ones we got.", modMailThreadId, throwable);
}
self.logModMailThread(modMailThreadId, messages, note).thenRun(() -> {
self.afterSuccessfulLog(modMailThreadId, feedBack, notifyUser);
}).exceptionally(innerThrowable -> {
sendModMailFailure("modmail_exception_generic", modMailThread.getUser(), modMailThreadId, feedBack, innerThrowable);
log.error("Failed to log messages for mod mail thread {}.", modMailThreadId, innerThrowable);
return null;
});
try {
self.logModMailThread(modMailThreadId, messages, note).thenRun(() -> {
self.afterSuccessfulLog(modMailThreadId, feedBack, notifyUser);
}).exceptionally(innerThrowable -> {
sendModMailFailure("modmail_exception_generic", modMailThread.getUser(), modMailThreadId, feedBack, innerThrowable);
log.error("Failed to log messages for mod mail thread {}.", modMailThreadId, innerThrowable);
return null;
});
} catch (PostTargetException po) {
log.error("Failed to log mod mail messages", po);
sendModMailFailure("modmail_exception_post_target_not_defined", modMailThread.getUser(), modMailThreadId, feedBack, po);
} catch (Exception e) {
log.error("Failed to log mod mail messages", e);
sendModMailFailure("modmail_exception_generic", modMailThread.getUser(), modMailThreadId, feedBack, e);
}
});

View File

@@ -0,0 +1,12 @@
{
"author": {
"name": "${user.member.effectiveName}",
"avatar": "${user.member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "<#include "modmail_post_target_error">"
}

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.service.LockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@Component
public class LockStartupListener {
@Autowired
private LockService lockService;
@EventListener
@Transactional
public void handleContextRefreshEvent(ContextRefreshedEvent ctxStartEvt) {
lockService.setupLocks();
}
}

View File

@@ -16,6 +16,5 @@ import javax.persistence.*;
public class ALock {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}

View File

@@ -1,6 +1,7 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.command.models.TableLocks;
import dev.sheldan.abstracto.core.model.database.ALock;
import dev.sheldan.abstracto.core.repository.LockRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -16,4 +17,17 @@ public class LockServiceBean implements LockService {
int ordinal = toLock.ordinal();
lockRepository.findArticleForRead((long) ordinal);
}
@Override
public void setupLocks() {
for (TableLocks lo :TableLocks.values()) {
if(!lockRepository.existsById((long)lo.ordinal())) {
ALock build = ALock
.builder()
.id((long) lo.ordinal())
.build();
lockRepository.save(build);
}
}
}
}

View File

@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.config.DynamicKeyLoader;
import dev.sheldan.abstracto.core.exception.ChannelException;
import dev.sheldan.abstracto.core.exception.GuildException;
import dev.sheldan.abstracto.core.exception.PostTargetException;
import dev.sheldan.abstracto.core.service.management.PostTargetManagement;
import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.templating.model.MessageToSend;
@@ -70,7 +71,7 @@ public class PostTargetServiceBean implements PostTargetService {
return postTarget;
} else {
log.error("PostTarget {} in server {} was not found!", postTargetName, serverId);
throw new ChannelException(String.format("Incorrect post target configuration: Post target %s was not found.", postTargetName));
throw new PostTargetException(String.format("Incorrect post target configuration: Post target %s was not found.", postTargetName));
}
}

View File

@@ -4,4 +4,5 @@ import dev.sheldan.abstracto.core.command.models.TableLocks;
public interface LockService {
void lockTable(TableLocks toLock);
void setupLocks();
}