refactor(configuration): Setup configuration and menu to be reuseable

This commit is contained in:
Michel Fedde 2025-06-23 00:57:02 +02:00
parent 863ae3fab2
commit d46bbd84c5
21 changed files with 551 additions and 452 deletions

View file

@ -1,6 +1,5 @@
import {Container} from "../../Container/Container";
import {PlaydateRepository} from "../../Database/Repositories/PlaydateRepository";
import {GroupConfigurationHandler} from "../../Configuration/Groups/GroupConfigurationHandler";
import {GroupConfigurationRepository} from "../../Database/Repositories/GroupConfigurationRepository";
import {PlaydateModel} from "../../Database/Models/PlaydateModel";
import {ChannelId} from "../../types/DiscordTypes";
@ -8,6 +7,12 @@ import {DiscordClient} from "../../Discord/DiscordClient";
import {EmbedBuilder, roleMention, time} from "discord.js";
import {ArrayUtils} from "../../Utilities/ArrayUtils";
import {EventConfiguration, EventType, TimedEvent} from "../EventHandler.types";
import {ConfigurationHandler} from "../../Configuration/ConfigurationHandler";
import {
GroupConfigurationProvider,
RuntimeGroupConfiguration
} from "../../Configuration/Groups/GroupConfigurationProvider";
import {GroupConfigurationModel} from "../../Database/Models/GroupConfigurationModel";
export class ReminderEvent implements TimedEvent {
private static REMINDER_INTERVALS = [
@ -60,13 +65,15 @@ export class ReminderEvent implements TimedEvent {
if (!playdate.group) {
return Promise.resolve();
}
const configurationHandler = new GroupConfigurationHandler(
this.groupConfigurationRepository,
playdate.group
const groupConfig = new ConfigurationHandler<GroupConfigurationModel, RuntimeGroupConfiguration>(
new GroupConfigurationProvider(
Container.get<GroupConfigurationRepository>(GroupConfigurationRepository.name),
playdate.group
)
);
const config = configurationHandler.getConfiguration();
const config = groupConfig.getCompleteConfiguration();
const targetChannel = config.channels?.playdateReminders;
if (!targetChannel) {

View file

@ -3,10 +3,15 @@ import {PlaydateModel} from "../../Database/Models/PlaydateModel";
import PlaydateTableConfiguration from "../../Database/tables/Playdate";
import {EmbedBuilder, roleMention, time} from "discord.js";
import {ArrayUtils} from "../../Utilities/ArrayUtils";
import {GroupConfigurationHandler} from "../../Configuration/Groups/GroupConfigurationHandler";
import {Container} from "../../Container/Container";
import {GroupConfigurationRepository} from "../../Database/Repositories/GroupConfigurationRepository";
import {DiscordClient} from "../../Discord/DiscordClient";
import {ConfigurationHandler} from "../../Configuration/ConfigurationHandler";
import {GroupConfigurationModel} from "../../Database/Models/GroupConfigurationModel";
import {
GroupConfigurationProvider,
RuntimeGroupConfiguration
} from "../../Configuration/Groups/GroupConfigurationProvider";
const NEW_PLAYDATE_MESSAGES = [
'A new playdate was added. Lets hope, your GM has not planned to kill you. >:]',
@ -25,12 +30,14 @@ export async function sendCreatedNotificationEventHandler(event: ElementCreatedE
}
const configurationHandler = new GroupConfigurationHandler(
Container.get<GroupConfigurationRepository>(GroupConfigurationRepository.name),
playdate.group
const groupConfig = new ConfigurationHandler<GroupConfigurationModel, RuntimeGroupConfiguration>(
new GroupConfigurationProvider(
Container.get<GroupConfigurationRepository>(GroupConfigurationRepository.name),
playdate.group
)
);
const targetChannel = configurationHandler.getConfigurationByPath('channels.newPlaydates');
const targetChannel = groupConfig.getConfigurationByPath('channels.newPlaydates');
if (!targetChannel) {
return;
}