using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Migrations; namespace EllieBot.Migrations; public static class MigrationQueries { public static void MigrateRero(MigrationBuilder migrationBuilder) { if (migrationBuilder.IsSqlite()) { migrationBuilder.Sql( @"insert or ignore into reactionroles(guildid, channelid, messageid, emote, roleid, 'group', levelreq, dateadded) select guildid, channelid, messageid, emotename, roleid, exclusive, 0, reactionrolemessage.dateadded from reactionrole left join reactionrolemessage on reactionrolemessage.id = reactionrole.reactionrolemessageid left join guildconfigs on reactionrolemessage.guildconfigid = guildconfigs.id;"); } else if (migrationBuilder.IsNpgsql()) { migrationBuilder.Sql( @"insert into reactionroles(guildid, channelid, messageid, emote, roleid, ""group"", levelreq, dateadded) select guildid, channelid, messageid, emotename, roleid, exclusive::int, 0, reactionrolemessage.dateadded from reactionrole left join reactionrolemessage on reactionrolemessage.id = reactionrole.reactionrolemessageid left join guildconfigs on reactionrolemessage.guildconfigid = guildconfigs.id ON CONFLICT DO NOTHING;"); } else { throw new NotSupportedException("This database provider doesn't have an implementation for MigrateRero"); } } public static void GuildConfigCleanup(MigrationBuilder builder) { builder.Sql($""" DELETE FROM "DelMsgOnCmdChannel" WHERE "GuildConfigId" is NULL; DELETE FROM "WarningPunishment" WHERE "GuildConfigId" NOT IN (SELECT "Id" from "GuildConfigs"); DELETE FROM "StreamRoleBlacklistedUser" WHERE "StreamRoleSettingsId" is NULL; DELETE FROM "Permissions" WHERE "GuildConfigId" NOT IN (SELECT "Id" from "GuildConfigs"); """); } public static void GreetSettingsCopy(MigrationBuilder builder) { builder.Sql(""" INSERT INTO GreetSettings (GuildId, GreetType, MessageText, IsEnabled, ChannelId, AutoDeleteTimer) SELECT GuildId, 0, ChannelGreetMessageText, SendChannelGreetMessage, GreetMessageChannelId, AutoDeleteGreetMessagesTimer FROM GuildConfigs WHERE SendChannelGreetMessage = TRUE; INSERT INTO GreetSettings (GuildId, GreetType, MessageText, IsEnabled, ChannelId, AutoDeleteTimer) SELECT GuildId, 1, DmGreetMessageText, SendDmGreetMessage, GreetMessageChannelId, 0 FROM GuildConfigs WHERE SendDmGreetMessage = TRUE; INSERT INTO GreetSettings (GuildId, GreetType, MessageText, IsEnabled, ChannelId, AutoDeleteTimer) SELECT GuildId, 2, ChannelByeMessageText, SendChannelByeMessage, ByeMessageChannelId, AutoDeleteByeMessagesTimer FROM GuildConfigs WHERE SendChannelByeMessage = TRUE; INSERT INTO GreetSettings (GuildId, GreetType, MessageText, IsEnabled, ChannelId, AutoDeleteTimer) SELECT GuildId, 3, BoostMessage, SendBoostMessage, BoostMessageChannelId, BoostMessageDeleteAfter FROM GuildConfigs WHERE SendBoostMessage = TRUE; """); } public static void AddGuildIdsToWarningPunishment(MigrationBuilder builder) { builder.Sql(""" UPDATE WarningPunishment SET GuildId = (SELECT GuildId FROM guildconfigs WHERE Id = GuildConfigId); DELETE FROM WarningPunishment as wp WHERE (wp.Count, wp.GuildConfigId) in ( SELECT wp2.Count, wp2.GuildConfigId FROM WarningPunishment as wp2 GROUP BY wp2.Count, wp2.GuildConfigId HAVING COUNT(id) > 1 ); """); } }