From b1785ce37359a84f1c6b1b93651c3c9a946390d6 Mon Sep 17 00:00:00 2001 From: Liam Date: Mon, 1 Jul 2024 01:33:52 +0100 Subject: [PATCH] impl pre shutdown saving --- src/main/java/cc/fascinated/bat/BatApplication.java | 11 +++++++++++ .../java/cc/fascinated/bat/event/EventListener.java | 6 ++++++ .../commands/server/feature/DisableSubCommand.java | 2 +- .../java/cc/fascinated/bat/service/GuildService.java | 12 +++++++++++- .../java/cc/fascinated/bat/service/UserService.java | 12 +++++++++++- 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/main/java/cc/fascinated/bat/BatApplication.java b/src/main/java/cc/fascinated/bat/BatApplication.java index 0d03970..09570d2 100644 --- a/src/main/java/cc/fascinated/bat/BatApplication.java +++ b/src/main/java/cc/fascinated/bat/BatApplication.java @@ -1,9 +1,12 @@ package cc.fascinated.bat; import cc.fascinated.bat.config.Config; +import cc.fascinated.bat.event.EventListener; +import cc.fascinated.bat.service.EventService; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import io.mongock.runner.springboot.EnableMongock; +import jakarta.annotation.PreDestroy; import lombok.NonNull; import lombok.SneakyThrows; import lombok.extern.log4j.Log4j2; @@ -41,4 +44,12 @@ public class BatApplication { log.info("APP IS RUNNING IN %s MODE!!!!!!!!!".formatted(Config.isProduction() ? "PRODUCTION" : "DEVELOPMENT")); } + + @PreDestroy + public void onShutdown() { + log.info("Shutting down..."); + for (EventListener listener : EventService.LISTENERS) { + listener.onSpringShutdown(); + } + } } \ No newline at end of file diff --git a/src/main/java/cc/fascinated/bat/event/EventListener.java b/src/main/java/cc/fascinated/bat/event/EventListener.java index 699d0e4..15fe225 100644 --- a/src/main/java/cc/fascinated/bat/event/EventListener.java +++ b/src/main/java/cc/fascinated/bat/event/EventListener.java @@ -104,4 +104,10 @@ public interface EventListener { */ default void onGuildMemberUpdateNickname(@NonNull BatGuild guild, @NonNull BatUser user, String oldName, String newName, @NonNull GuildMemberUpdateNicknameEvent event) { } + + /** + * Called when Spring is shutting down + */ + default void onSpringShutdown() { + } } diff --git a/src/main/java/cc/fascinated/bat/features/base/commands/server/feature/DisableSubCommand.java b/src/main/java/cc/fascinated/bat/features/base/commands/server/feature/DisableSubCommand.java index 0982e5b..e7e1da7 100644 --- a/src/main/java/cc/fascinated/bat/features/base/commands/server/feature/DisableSubCommand.java +++ b/src/main/java/cc/fascinated/bat/features/base/commands/server/feature/DisableSubCommand.java @@ -54,7 +54,7 @@ public class DisableSubCommand extends BatSubCommand { } featureProfile.disableFeature(feature); - interaction.replyEmbeds(EmbedUtils.successEmbed() + interaction.replyEmbeds(EmbedUtils.errorEmbed() .setDescription("Successfully disabled the `%s` feature".formatted(feature.getName())) .build()).queue(); } diff --git a/src/main/java/cc/fascinated/bat/service/GuildService.java b/src/main/java/cc/fascinated/bat/service/GuildService.java index 318e6d7..411e4c5 100644 --- a/src/main/java/cc/fascinated/bat/service/GuildService.java +++ b/src/main/java/cc/fascinated/bat/service/GuildService.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.service; import cc.fascinated.bat.common.TimerUtils; +import cc.fascinated.bat.event.EventListener; import cc.fascinated.bat.model.BatGuild; import cc.fascinated.bat.premium.PremiumProfile; import com.mongodb.client.model.Filters; @@ -28,7 +29,7 @@ import java.util.concurrent.TimeUnit; @Log4j2(topic = "Guild Service") @Getter @DependsOn({"discordService", "mongoService"}) -public class GuildService extends ListenerAdapter { +public class GuildService extends ListenerAdapter implements EventListener { private static final long SAVE_INTERVAL = TimeUnit.MINUTES.toMillis(5); /** @@ -101,4 +102,13 @@ public class GuildService extends ListenerAdapter { guild.save(); guilds.remove(guild.getId()); } + + @Override + public void onSpringShutdown() { + log.info("Saving all guilds before shutdown..."); + for (BatGuild guild : guilds.values()) { + guild.save(); + } + log.info("Saved all guilds."); + } } diff --git a/src/main/java/cc/fascinated/bat/service/UserService.java b/src/main/java/cc/fascinated/bat/service/UserService.java index aaa52c1..2318bf8 100644 --- a/src/main/java/cc/fascinated/bat/service/UserService.java +++ b/src/main/java/cc/fascinated/bat/service/UserService.java @@ -1,6 +1,7 @@ package cc.fascinated.bat.service; import cc.fascinated.bat.common.TimerUtils; +import cc.fascinated.bat.event.EventListener; import cc.fascinated.bat.model.BatUser; import com.mongodb.client.model.Filters; import lombok.Getter; @@ -22,7 +23,7 @@ import java.util.concurrent.TimeUnit; @Log4j2(topic = "User Service") @Getter @DependsOn({"discordService", "mongoService"}) -public class UserService { +public class UserService implements EventListener { private static final long SAVE_INTERVAL = TimeUnit.MINUTES.toMillis(5); /** @@ -67,4 +68,13 @@ public class UserService { log.info("Created user \"{}\" - \"{}\"", user.getName(), user.getId()); return user; } + + @Override + public void onSpringShutdown() { + log.info("Saving all users before shutdown..."); + for (BatUser user : users.values()) { + user.save(); + } + log.info("Saved all users."); + } }