From 271ea7364ad73ec852bdd81d9017d2c475fddc12 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Fri, 8 May 2020 23:22:23 +0200 Subject: [PATCH] fixed initial setup for mod mail category fixed setup for locking added exception message in case the modmail post target is not defined --- .../service/ModMailThreadServiceBean.java | 25 +++++++++++++------ ...on_post_target_not_defined_embed_en_US.ftl | 12 +++++++++ .../core/listener/LockStartupListener.java | 21 ++++++++++++++++ .../abstracto/core/model/database/ALock.java | 1 - .../core/service/LockServiceBean.java | 14 +++++++++++ .../core/service/PostTargetServiceBean.java | 3 ++- .../abstracto/core/service/LockService.java | 1 + .../modmail_post_target_error_en_US.ftl | 1 + 8 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/exception/modmail_exception_post_target_not_defined_embed_en_US.ftl create mode 100644 abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/listener/LockStartupListener.java create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_post_target_error_en_US.ftl diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java index 8f6906c0d..a68a0784a 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java @@ -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 modMailMessages = modMailThread.getMessages(); List> 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); + } }); diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/exception/modmail_exception_post_target_not_defined_embed_en_US.ftl b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/exception/modmail_exception_post_target_not_defined_embed_en_US.ftl new file mode 100644 index 000000000..5187db617 --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/exception/modmail_exception_post_target_not_defined_embed_en_US.ftl @@ -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">" +} \ No newline at end of file diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/listener/LockStartupListener.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/listener/LockStartupListener.java new file mode 100644 index 000000000..8f76db287 --- /dev/null +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/listener/LockStartupListener.java @@ -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(); + } +} diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/model/database/ALock.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/model/database/ALock.java index 68c733b11..5870204d1 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/model/database/ALock.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/model/database/ALock.java @@ -16,6 +16,5 @@ import javax.persistence.*; public class ALock { @Id @Column(name = "id") - @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/LockServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/LockServiceBean.java index d27edabe0..0d62c6dc3 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/LockServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/LockServiceBean.java @@ -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); + } + } + } } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java index a71bbea0f..3595a6c1b 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/PostTargetServiceBean.java @@ -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)); } } diff --git a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/LockService.java b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/LockService.java index 5c44743b1..7086943c3 100644 --- a/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/LockService.java +++ b/abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/LockService.java @@ -4,4 +4,5 @@ import dev.sheldan.abstracto.core.command.models.TableLocks; public interface LockService { void lockTable(TableLocks toLock); + void setupLocks(); } diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_post_target_error_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_post_target_error_en_US.ftl new file mode 100644 index 000000000..d07f8f8ae --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/exception/modmail_post_target_error_en_US.ftl @@ -0,0 +1 @@ +Post target `modmaillog` was not found. \ No newline at end of file