From c5f9ae2c6bbe8fa750e7dfcbbed8166a52926ad8 Mon Sep 17 00:00:00 2001 From: Adam R Grey Date: Fri, 5 Jan 2024 22:12:57 -0500 Subject: [PATCH] collapse users - extracted for LinkMe and my own self-registration --- Behavior/Behaver.cs | 41 ++++++++++++++++++++++++++++++++++++++++- Behavior/LinkMe.cs | 38 ++++---------------------------------- ConsoleService.cs | 4 ++-- Program.cs | 2 +- 4 files changed, 47 insertions(+), 38 deletions(-) diff --git a/Behavior/Behaver.cs b/Behavior/Behaver.cs index d269e5d..f837224 100644 --- a/Behavior/Behaver.cs +++ b/Behavior/Behaver.cs @@ -77,9 +77,48 @@ public class Behaver } else if (SelfUser != selfAccount.IsUser) { - //TODO: collapse + CollapseUsers(SelfUser, selfAccount.IsUser); } SelfAccounts = _db.Accounts.Where(a => a.IsUser == SelfUser).ToList(); } + + public bool CollapseUsers(User primary, User secondary) + { + Console.WriteLine($"{secondary.Id} is being consumed into {primary.Id}"); + primary.Accounts.AddRange(secondary.Accounts); + foreach(var a in secondary.Accounts) + { + a.IsUser = primary; + } + secondary.Accounts.Clear(); + Console.WriteLine("accounts transferred"); + try + { + _db.SaveChanges(); + } + catch(Exception e) + { + Console.WriteLine("First save exception."); + Console.Error.WriteLine(e); + return false; + } + Console.WriteLine("saved"); + + + _db.Users.Remove(secondary); + Console.WriteLine("old account cleaned up"); + try + { + _db.SaveChanges(); + } + catch(Exception e) + { + Console.WriteLine("Second save exception."); + Console.Error.WriteLine(e); + return false; + } + Console.WriteLine("saved, again, separately"); + return true; + } } #pragma warning restore 4014 //the "async not awaited" error diff --git a/Behavior/LinkMe.cs b/Behavior/LinkMe.cs index b3a9fb3..b6c012f 100644 --- a/Behavior/LinkMe.cs +++ b/Behavior/LinkMe.cs @@ -74,44 +74,14 @@ public class LinkClose : Behavior return true; } - Console.WriteLine($"{secondary.Id} is being consumed into {_primary.IsUser.Id}"); - _primary.IsUser.Accounts.AddRange(secondary.Accounts); - foreach(var a in secondary.Accounts) + if(Behaver.Instance.CollapseUsers(_primary.IsUser, secondary)) { - a.IsUser = _primary.IsUser; + await message.Channel.SendMessage("done :)"); } - secondary.Accounts.Clear(); - Console.WriteLine("accounts transferred"); - try + else { - await _db.SaveChangesAsync(); + await message.Channel.SendMessage("failed :("); } - catch(Exception e) - { - message.Channel.SendMessage("error in first save"); - Console.WriteLine("fucks sake if I don't catch Exception it *mysteriously vanishes*"); - Console.Error.WriteLine(e); - return false; - } - Console.WriteLine("saved"); - - - _db.Users.Remove(secondary); - Console.WriteLine("old account cleaned up"); - try - { - await _db.SaveChangesAsync(); - } - catch(Exception e) - { - message.Channel.SendMessage("error in second save"); - Console.WriteLine("fucks sake if I don't catch Exception it *mysteriously vanishes*"); - Console.Error.WriteLine(e); - return false; - } - Console.WriteLine("saved, again, separately"); - - await message.Channel.SendMessage("done :)"); return true; } diff --git a/ConsoleService.cs b/ConsoleService.cs index dd746b8..8698ae7 100644 --- a/ConsoleService.cs +++ b/ConsoleService.cs @@ -22,8 +22,8 @@ namespace vassago public async Task StartAsync(CancellationToken cancellationToken) { var dbc = new ChattingContext(); - dbc.Database.EnsureCreated(); - dbc.Database.Migrate(); + await dbc.Database.EnsureCreatedAsync(); + await dbc.Database.MigrateAsync(); if (DiscordTokens?.Any() ?? false) foreach (var dt in DiscordTokens) diff --git a/Program.cs b/Program.cs index 583ec92..c0b75ad 100644 --- a/Program.cs +++ b/Program.cs @@ -7,7 +7,7 @@ var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); builder.Services.AddSingleton(); builder.Services.AddDbContext(options => - options.UseNpgsql(builder.Configuration.GetConnectionString("ChattingContext"))); + options.UseNpgsql(builder.Configuration.GetConnectionString("ChattingContext") ),ServiceLifetime.Transient); var app = builder.Build();