From 60dda075a5374cd9da49678f18352a8921f20afe Mon Sep 17 00:00:00 2001 From: Kwoth Date: Sat, 18 Mar 2017 02:18:31 +0100 Subject: [PATCH] Fixed permissions duplication bug WOOHOO --- .../Modules/Administration/Administration.cs | 2 +- .../Modules/Permissions/Permissions.cs | 12 +++--- src/NadekoBot/Services/CommandHandler.cs | 2 +- .../Repositories/IGuildConfigRepository.cs | 1 + .../Impl/GuildConfigRepository.cs | 43 ++++++++++++++++--- 5 files changed, 46 insertions(+), 14 deletions(-) diff --git a/src/NadekoBot/Modules/Administration/Administration.cs b/src/NadekoBot/Modules/Administration/Administration.cs index d98458b4..4eb9d28c 100644 --- a/src/NadekoBot/Modules/Administration/Administration.cs +++ b/src/NadekoBot/Modules/Administration/Administration.cs @@ -59,7 +59,7 @@ namespace NadekoBot.Modules.Administration { using (var uow = DbHandler.UnitOfWork()) { - var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.Permissions)); + var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); config.Permissions = Permissionv2.GetDefaultPermlist; await uow.CompleteAsync(); UpdateCache(config); diff --git a/src/NadekoBot/Modules/Permissions/Permissions.cs b/src/NadekoBot/Modules/Permissions/Permissions.cs index ce04f75c..2d21630d 100644 --- a/src/NadekoBot/Modules/Permissions/Permissions.cs +++ b/src/NadekoBot/Modules/Permissions/Permissions.cs @@ -87,7 +87,7 @@ namespace NadekoBot.Modules.Permissions if (i % 3 == 0) log.Info("Migrating Permissions #" + i + " - GuildId: " + oc.Key); i++; - var gc = uow.GuildConfigs.For(oc.Key, set => set.Include(x => x.Permissions)); + var gc = uow.GuildConfigs.GcWithPermissionsv2For(oc.Key); var oldPerms = oc.Value.RootPermission.AsEnumerable().Reverse().ToList(); uow._context.Set().RemoveRange(oldPerms); @@ -126,7 +126,7 @@ namespace NadekoBot.Modules.Permissions { using (var uow = DbHandler.UnitOfWork()) { - var config = uow.GuildConfigs.For(guildId, set => set.Include(x => x.Permissions)); + var config = uow.GuildConfigs.GcWithPermissionsv2For(guildId); //var orderedPerms = new PermissionsCollection(config.Permissions); var max = config.Permissions.Max(x => x.Index); //have to set its index to be the highest foreach (var perm in perms) @@ -161,7 +161,7 @@ namespace NadekoBot.Modules.Permissions { using (var uow = DbHandler.UnitOfWork()) { - var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.Permissions)); + var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); config.VerbosePermissions = action.Value; await uow.CompleteAsync().ConfigureAwait(false); UpdateCache(config); @@ -185,7 +185,7 @@ namespace NadekoBot.Modules.Permissions using (var uow = DbHandler.UnitOfWork()) { - var config = uow.GuildConfigs.For(Context.Guild.Id, set => set); + var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); if (role == null) { await ReplyConfirmLocalized("permrole", Format.Bold(config.PermissionRole)).ConfigureAwait(false); @@ -247,7 +247,7 @@ namespace NadekoBot.Modules.Permissions Permissionv2 p; using (var uow = DbHandler.UnitOfWork()) { - var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.Permissions)); + var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); var permsCol = new PermissionsCollection(config.Permissions); p = permsCol[index]; permsCol.RemoveAt(index); @@ -278,7 +278,7 @@ namespace NadekoBot.Modules.Permissions Permissionv2 fromPerm; using (var uow = DbHandler.UnitOfWork()) { - var config = uow.GuildConfigs.For(Context.Guild.Id, set => set.Include(x => x.Permissions)); + var config = uow.GuildConfigs.GcWithPermissionsv2For(Context.Guild.Id); var permsCol = new PermissionsCollection(config.Permissions); var fromFound = from < permsCol.Count; diff --git a/src/NadekoBot/Services/CommandHandler.cs b/src/NadekoBot/Services/CommandHandler.cs index ae005e95..297b606b 100644 --- a/src/NadekoBot/Services/CommandHandler.cs +++ b/src/NadekoBot/Services/CommandHandler.cs @@ -423,7 +423,7 @@ namespace NadekoBot.Services { using (var uow = DbHandler.UnitOfWork()) { - var config = uow.GuildConfigs.For(context.Guild.Id, set => set.Include(x => x.Permissions)); + var config = uow.GuildConfigs.GcWithPermissionsv2For(context.Guild.Id); Permissions.UpdateCache(config); } Permissions.Cache.TryGetValue(context.Guild.Id, out pc); diff --git a/src/NadekoBot/Services/Database/Repositories/IGuildConfigRepository.cs b/src/NadekoBot/Services/Database/Repositories/IGuildConfigRepository.cs index c71b2824..cca54609 100644 --- a/src/NadekoBot/Services/Database/Repositories/IGuildConfigRepository.cs +++ b/src/NadekoBot/Services/Database/Repositories/IGuildConfigRepository.cs @@ -15,5 +15,6 @@ namespace NadekoBot.Services.Database.Repositories IEnumerable GetAllFollowedStreams(); void SetCleverbotEnabled(ulong id, bool cleverbotEnabled); IEnumerable Permissionsv2ForAll(); + GuildConfig GcWithPermissionsv2For(ulong guildId); } } diff --git a/src/NadekoBot/Services/Database/Repositories/Impl/GuildConfigRepository.cs b/src/NadekoBot/Services/Database/Repositories/Impl/GuildConfigRepository.cs index 909a15d5..150d671d 100644 --- a/src/NadekoBot/Services/Database/Repositories/Impl/GuildConfigRepository.cs +++ b/src/NadekoBot/Services/Database/Repositories/Impl/GuildConfigRepository.cs @@ -67,19 +67,25 @@ namespace NadekoBot.Services.Database.Repositories.Impl })); _context.SaveChanges(); } - else if (config.Permissions == null) - { - config.Permissions = Permissionv2.GetDefaultPermlist; - _context.SaveChanges(); - } return config; } public GuildConfig LogSettingsFor(ulong guildId) { - return _set.Include(gc => gc.LogSetting) + var config = _set.Include(gc => gc.LogSetting) .ThenInclude(gc => gc.IgnoredChannels) .FirstOrDefault(); + + if (config == null) + { + _set.Add((config = new GuildConfig + { + GuildId = guildId, + Permissions = Permissionv2.GetDefaultPermlist + })); + _context.SaveChanges(); + } + return config; } public IEnumerable OldPermissionsForAll() @@ -108,6 +114,31 @@ namespace NadekoBot.Services.Database.Repositories.Impl return query.ToList(); } + public GuildConfig GcWithPermissionsv2For(ulong guildId) + { + var config = _set + .Where(gc => gc.GuildId == guildId) + .Include(gc => gc.Permissions) + .FirstOrDefault(); + + if (config == null) // if there is no guildconfig, create new one + { + _set.Add((config = new GuildConfig + { + GuildId = guildId, + Permissions = Permissionv2.GetDefaultPermlist + })); + _context.SaveChanges(); + } + else if (config.Permissions == null || !config.Permissions.Any()) // if no perms, add default ones + { + config.Permissions = Permissionv2.GetDefaultPermlist; + _context.SaveChanges(); + } + + return config; + } + public IEnumerable GetAllFollowedStreams() => _set.Include(gc => gc.FollowedStreams) .SelectMany(gc => gc.FollowedStreams)