diff --git a/Core/Extensions/DbContextExtension.cs b/Core/Extensions/DbContextExtension.cs index e05cbc5..847d109 100644 --- a/Core/Extensions/DbContextExtension.cs +++ b/Core/Extensions/DbContextExtension.cs @@ -37,4 +37,18 @@ public static class DbContextExtension entry.State = EntityState.Modified; } + + public static void AddOrUpdate(this DbContext dbContext, object entity) + { + try + { + dbContext.Update(entity); + dbContext.SaveChanges(); + } + catch (DbUpdateConcurrencyException e) + { + dbContext.Add(entity); + dbContext.SaveChanges(); + } + } } diff --git a/Core/GeneralHandler.cs b/Core/GeneralHandler.cs index 3bd045c..9dc2227 100644 --- a/Core/GeneralHandler.cs +++ b/Core/GeneralHandler.cs @@ -71,8 +71,7 @@ namespace Kruzya.TelegramBot.Core await databaseContext.Users.AddAsync(new BotUser() { ChatId = chat, - UserId = user, - BotUserId = new Guid() + UserId = user }); } } diff --git a/modules/ChatManagement/Handler/Reputation.cs b/modules/ChatManagement/Handler/Reputation.cs index aa8b1af..d8e560c 100644 --- a/modules/ChatManagement/Handler/Reputation.cs +++ b/modules/ChatManagement/Handler/Reputation.cs @@ -116,7 +116,7 @@ namespace West.TelegramBot.ChatManagement.Handler _logger.LogDebug("Saving receiver rep with value: {Value}", receiverRepCount); receiverRepOption.SetValue(receiverRepCount); - Db.Update(receiverRepOption); + Db.AddOrUpdate(receiverRepOption); _logger.LogDebug("Updated value: {Value}", receiverRepOption.GetValue()); await Reply($"{From.ToHtml()}({await GetUserReputation(From)}) " + @@ -141,7 +141,7 @@ namespace West.TelegramBot.ChatManagement.Handler reputation = Math.Round(reputation, 2); var opt = await GetReputationOption(RepliedUser); opt.SetValue(reputation); - Db.Update(opt); + Db.AddOrUpdate(opt); await Reply( new HtmlString() diff --git a/modules/ChatManagement/Handler/Rules.cs b/modules/ChatManagement/Handler/Rules.cs index 675d4a6..bbebfdd 100644 --- a/modules/ChatManagement/Handler/Rules.cs +++ b/modules/ChatManagement/Handler/Rules.cs @@ -19,7 +19,7 @@ namespace West.TelegramBot.ChatManagement.Handler var opt = await Db.UserValues.FindOrCreateOption(Chat.Id, "rulesMsgId"); opt.SetValue(replyToMessage.MessageId); - Db.Update(opt); + Db.AddOrUpdate(opt); } [Command(InChat.Public, "rules", CommandParseMode.Both)] diff --git a/modules/ChatManagement/Handler/Warn.cs b/modules/ChatManagement/Handler/Warn.cs index 9e5816e..1957c6b 100644 --- a/modules/ChatManagement/Handler/Warn.cs +++ b/modules/ChatManagement/Handler/Warn.cs @@ -24,7 +24,7 @@ namespace West.TelegramBot.ChatManagement.Handler var warnOption = await GetWarnOption(warnUser); var warnCount = warnOption!.GetValue() + 1; warnOption.SetValue(warnCount); - Db.Update(warnOption); + Db.AddOrUpdate(warnOption); await Bot.SendTextMessageAsync(Chat.Id, $"{warnUser.ToHtml()}, Вам выдано предупреждение! " + $"Текущее кол-во: {warnCount}/3", @@ -49,7 +49,7 @@ namespace West.TelegramBot.ChatManagement.Handler warnCount = Math.Max(warnCount - 1, 0); warnOption.SetValue(warnCount); - Db.Update(warnOption); + Db.AddOrUpdate(warnOption); await Bot.SendTextMessageAsync(Chat.Id, $"{RepliedUser.ToHtml()}, с Вас снято предупреждение! " + diff --git a/modules/Entertainment/Handler/Fun/AbstractAnimationReply.cs b/modules/Entertainment/Handler/Fun/AbstractAnimationReply.cs index ffcf7c6..e157dca 100644 --- a/modules/Entertainment/Handler/Fun/AbstractAnimationReply.cs +++ b/modules/Entertainment/Handler/Fun/AbstractAnimationReply.cs @@ -47,7 +47,7 @@ namespace West.Entertainment.Handler.Fun var animationFileOption = await GetAnimationFileOption(); animationFileOption.SetValue(animation.FileId); - _db.Update(animationFileOption); + _db.AddOrUpdate(animationFileOption); } // ReSharper disable once MemberCanBeProtected.Global @@ -77,7 +77,7 @@ namespace West.Entertainment.Handler.Fun replyToMessageId: GetMessageIdToReply() ?? Message?.MessageId); nextUseOption.SetValue(DateTime.Now + Cooldown); - _db.Update(nextUseOption); + _db.AddOrUpdate(nextUseOption); return true; } diff --git a/modules/UserGroupTag/Handler.cs b/modules/UserGroupTag/Handler.cs index 59a1534..5f26a12 100644 --- a/modules/UserGroupTag/Handler.cs +++ b/modules/UserGroupTag/Handler.cs @@ -56,7 +56,7 @@ namespace UserGroupTag tagDictionary[groupName] = memberList; userGroupOption.SetValue(tagDictionary); - _db.Update(userGroupOption); + _db.AddOrUpdate(userGroupOption); _userCache.SetValue(repliedMessage.From.Id, repliedMessage.From, Int32.MaxValue); await Bot.SendTextMessageAsync(chatId, $"{from.ToHtml()} добавлен в группу {groupName}",