Removing deprecated guild settings and cleaning up data layer separation

This commit is contained in:
NovaFox161
2024-04-13 00:48:57 -05:00
parent 8642f5ea9a
commit 6022c2bb22
12 changed files with 23 additions and 37 deletions

View File

@@ -56,7 +56,7 @@ class SettingsCommand(
.map(ApplicationCommandInteractionOptionValue::asSnowflake)
.orElse(settings.guildId)
val newSettings= settingsService.upsertSettings(settings.copy(controlRole = roleId.asString()))
val newSettings= settingsService.upsertSettings(settings.copy(controlRole = roleId))
return event.createFollowup(getMessage("role.success", settings))
.withEmbeds(embedService.settingsEmbeds(newSettings))

View File

@@ -1,6 +1,5 @@
package org.dreamexposure.discal.client.listeners.discord
import discord4j.common.util.Snowflake
import discord4j.core.event.domain.role.RoleDeleteEvent
import org.dreamexposure.discal.core.business.GuildSettingsService
import org.dreamexposure.discal.core.business.RsvpService
@@ -16,8 +15,8 @@ class RoleDeleteListener(
rsvpService.removeRoleForAll(event.guildId, event.roleId)
val settings = settingsService.getSettings(event.guildId)
if (!"everyone".equals(settings.controlRole, true) && event.roleId == Snowflake.of(settings.controlRole)) {
settingsService.upsertSettings(settings.copy(controlRole = "everyone"))
if (settings.controlRole != null && event.roleId == settings.controlRole) {
settingsService.upsertSettings(settings.copy(controlRole = null))
}
}
}

View File

@@ -88,7 +88,7 @@ class EmbedService(
////// Settings Embeds //////
/////////////////////////////
suspend fun settingsEmbeds(settings: GuildSettings): EmbedCreateSpec {
val controlRoleValue = if (settings.controlRole.equals("everyone", true)) "<@&${settings.guildId.asLong()}>" else "<@&${settings.controlRole}>"
val controlRoleValue = if (settings.controlRole == null) "<@&${settings.guildId.asLong()}>" else "<@&${settings.controlRole}>"
return defaultEmbedBuilder(settings)
.title(getEmbedMessage("settings", "view.title", settings.locale))

View File

@@ -39,14 +39,12 @@ class GuildSettingsService(
val saved = repository.save(GuildSettingsData(
guildId = settings.guildId.asLong(),
controlRole = settings.controlRole,
controlRole = settings.controlRole?.asString() ?: "everyone",
timeFormat = settings.interfaceStyle.timeFormat.value,
patronGuild = settings.patronGuild,
devGuild = settings.devGuild,
maxCalendars = settings.maxCalendars,
dmAnnouncements = settings.dmAnnouncements.joinToString(",") { it.asString() },
lang = settings.locale.toLanguageTag(),
prefix = settings.prefix,
branded = settings.interfaceStyle.branded,
announcementStyle = settings.interfaceStyle.announcementStyle.value,
eventKeepDuration = settings.eventKeepDuration,
@@ -62,14 +60,12 @@ class GuildSettingsService(
repository.updateByGuildId(
guildId = settings.guildId.asLong(),
controlRole = settings.controlRole,
controlRole = settings.controlRole?.asString() ?: "everyone",
timeFormat = settings.interfaceStyle.timeFormat.value,
patronGuild = settings.patronGuild,
devGuild = settings.devGuild,
maxCalendars = settings.maxCalendars,
dmAnnouncements = settings.dmAnnouncements.joinToString(",") { it.asString() },
lang = settings.locale.toLanguageTag(),
prefix = settings.prefix,
branded = settings.interfaceStyle.branded,
announcementStyle = settings.interfaceStyle.announcementStyle.value,
eventKeepDuration = settings.eventKeepDuration,

View File

@@ -2,7 +2,6 @@ package org.dreamexposure.discal.core.business
import discord4j.common.util.Snowflake
import discord4j.core.DiscordClient
import discord4j.discordjson.Id
import kotlinx.coroutines.reactor.awaitSingle
import org.springframework.beans.factory.BeanFactory
import org.springframework.beans.factory.getBean
@@ -19,11 +18,10 @@ class PermissionService(
suspend fun hasControlRole(guildId: Snowflake, memberId: Snowflake): Boolean {
val settings = settingsService.getSettings(guildId)
if (settings.controlRole.equals("everyone", true)) return true
if (settings.controlRole == guildId.asString()) return true
if (settings.controlRole == null || settings.controlRole == guildId) return true
val memberData = discordClient.getMemberById(guildId, memberId).data.awaitSingle()
return memberData.roles().contains(Id.of(settings.controlRole))
return memberData.roles().map(Snowflake::of).contains(settings.controlRole)
}
}

View File

@@ -11,9 +11,7 @@ data class GuildSettingsData(
val patronGuild: Boolean,
val devGuild : Boolean,
val maxCalendars: Int,
val dmAnnouncements: String,
val lang: String,
val prefix: String,
val branded: Boolean,
val announcementStyle: Int,
val eventKeepDuration: Boolean,

View File

@@ -17,9 +17,7 @@ interface GuildSettingsRepository : R2dbcRepository<GuildSettingsData, Long> {
patron_guild = :patronGuild,
dev_guild = :devGuild,
max_calendars = :maxCalendars,
dm_announcements = :dmAnnouncements,
lang = :lang,
prefix = :prefix,
branded = :branded,
announcement_style = :announcementStyle,
event_keep_duration = :eventKeepDuration
@@ -33,9 +31,7 @@ interface GuildSettingsRepository : R2dbcRepository<GuildSettingsData, Long> {
patronGuild: Boolean,
devGuild: Boolean,
maxCalendars: Int,
dmAnnouncements: String,
lang: String,
prefix: String,
branded: Boolean,
announcementStyle: Int,
eventKeepDuration: Boolean,

View File

@@ -5,20 +5,16 @@ import org.dreamexposure.discal.core.database.GuildSettingsData
import org.dreamexposure.discal.core.enums.time.TimeFormat
import org.dreamexposure.discal.core.extensions.asLocale
import org.dreamexposure.discal.core.extensions.asSnowflake
import org.dreamexposure.discal.core.extensions.asStringListFromDatabase
import java.util.*
data class GuildSettings(
val guildId: Snowflake,
val controlRole: String = "everyone",
val controlRole: Snowflake? = null,
val patronGuild: Boolean = false,
val devGuild: Boolean = false,
val maxCalendars: Int = 1,
val dmAnnouncements: Set<Snowflake> = setOf(),
val locale: Locale = Locale.ENGLISH,
@Deprecated("Should be removed since chat commands are no longer used")
val prefix: String = "!",
val eventKeepDuration: Boolean = false,
val interfaceStyle: InterfaceStyle = InterfaceStyle()
@@ -26,13 +22,11 @@ data class GuildSettings(
constructor(data: GuildSettingsData): this(
guildId = data.guildId.asSnowflake(),
controlRole = data.controlRole,
controlRole = if (data.controlRole.equals("everyone", true)) null else Snowflake.of(data.controlRole),
patronGuild = data.patronGuild,
devGuild = data.devGuild,
maxCalendars = data.maxCalendars,
dmAnnouncements = data.dmAnnouncements.asStringListFromDatabase().map(Snowflake::of).toSet(),
locale = data.lang.asLocale(),
prefix = data.prefix,
eventKeepDuration = data.eventKeepDuration,
interfaceStyle = InterfaceStyle(

View File

@@ -0,0 +1,7 @@
ALTER TABLE guild_settings DROP COLUMN prefix;
ALTER TABLE guild_settings DROP COLUMN dm_announcements;

View File

@@ -55,11 +55,11 @@ class GetWebGuildEndpoint(
// Convert to deprecated settings for compatibility with legacy website
GuildSettings(
guildID = it.guildId,
controlRole = it.controlRole,
controlRole = it.controlRole?.asString() ?: "everyone",
announcementStyle = AnnouncementStyle.fromValue(it.interfaceStyle.announcementStyle.value),
timeFormat = it.interfaceStyle.timeFormat,
lang = it.locale.toLanguageTag(),
prefix = it.prefix,
prefix = "!",
patronGuild = it.patronGuild,
devGuild = it.devGuild,
maxCalendars = it.maxCalendars,

View File

@@ -47,11 +47,11 @@ class GetGuildSettingsEndpoint(
// Convert to deprecated settings for compatibility with legacy website
GuildSettings(
guildID = it.guildId,
controlRole = it.controlRole,
controlRole = it.controlRole?.asString() ?: "everyone",
announcementStyle = AnnouncementStyle.fromValue(it.interfaceStyle.announcementStyle.value),
timeFormat = it.interfaceStyle.timeFormat,
lang = it.locale.toLanguageTag(),
prefix = it.prefix,
prefix = "!",
patronGuild = it.patronGuild,
devGuild = it.devGuild,
maxCalendars = it.maxCalendars,

View File

@@ -45,10 +45,9 @@ class UpdateGuildSettingsEndpoint(
mono { settingsService.getSettings(guildId) }.flatMap { settings ->
//Handle various things that are allowed to change
val conRole = body.optString("control_role", settings.controlRole)
val conRole = body.optString("control_role", settings.controlRole?.asString() ?: "everyone")
val aStyle = body.optInt("announcement_style", settings.interfaceStyle.announcementStyle.value)
val lang = body.optString("lang", settings.locale.toLanguageTag())
val prefix = body.optString("prefix", settings.prefix)
val timeFormat = body.optInt("time_format", settings.interfaceStyle.timeFormat.value)
var patronGuild = settings.patronGuild
var devGuild = settings.devGuild
@@ -64,14 +63,13 @@ class UpdateGuildSettingsEndpoint(
}
val newSettings = settings.copy(
controlRole = conRole,
controlRole = if (conRole.equals("everyone", true)) null else Snowflake.of(conRole),
interfaceStyle = settings.interfaceStyle.copy(
announcementStyle = GuildSettings.AnnouncementStyle.entries.first { it.value == aStyle },
timeFormat = TimeFormat.fromValue(timeFormat),
branded = branded,
),
locale = Locale.forLanguageTag(lang),
prefix = prefix,
patronGuild = patronGuild,
devGuild = devGuild,
maxCalendars = maxCals,