From 96dee083e9f21d3b870c0fb711297c9aafe454d5 Mon Sep 17 00:00:00 2001 From: Externius Date: Sat, 29 Nov 2025 13:46:38 +0100 Subject: [PATCH 1/2] Update nuget pkgs --- Directory.Packages.props | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 23000a3..5e00833 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -17,13 +17,13 @@ - - + + - + From 710267645f80d6f218e51cecb9ab24c752295436 Mon Sep 17 00:00:00 2001 From: Externius Date: Sat, 29 Nov 2025 13:47:06 +0100 Subject: [PATCH 2/2] Small code cleanup --- .../Interfaces/Services/DM/IDungeonService.cs | 17 +++++++-- .../Services/DM/DungeonService.cs | 18 +++++---- .../Data/AppDbContextInitializer.cs | 37 ++++++++++--------- src/Open5ETools.Web/Open5ETools.Web.csproj | 2 +- .../DungeonServiceTests/Create.cs | 14 ++++--- .../DungeonServiceTests/Generate.cs | 2 +- 6 files changed, 54 insertions(+), 36 deletions(-) diff --git a/src/Open5ETools.Core/Common/Interfaces/Services/DM/IDungeonService.cs b/src/Open5ETools.Core/Common/Interfaces/Services/DM/IDungeonService.cs index b44fc52..87caacc 100644 --- a/src/Open5ETools.Core/Common/Interfaces/Services/DM/IDungeonService.cs +++ b/src/Open5ETools.Core/Common/Interfaces/Services/DM/IDungeonService.cs @@ -7,17 +7,26 @@ public interface IDungeonService Task GetAllDungeonOptionsAsync(CancellationToken cancellationToken); Task GetAllDungeonOptionsForUserAsync(int userId, CancellationToken cancellationToken); Task GetDungeonOptionAsync(int id, CancellationToken cancellationToken); - Task GetDungeonOptionByNameAsync(string dungeonName, int userId, CancellationToken cancellationToken); + + Task GetDungeonOptionByNameAsync(string dungeonName, int userId, + CancellationToken cancellationToken); + Task GetDungeonAsync(int id, CancellationToken cancellationToken); - Task CreateOrUpdateDungeonAsync(DungeonOptionModel optionModel, bool addDungeon, int level, CancellationToken cancellationToken); + + Task CreateOrUpdateDungeonAsync(DungeonOptionModel optionModel, bool addDungeon, int level, + CancellationToken cancellationToken); + Task UpdateDungeonAsync(DungeonModel model, CancellationToken cancellationToken); Task CreateDungeonOptionAsync(DungeonOptionModel dungeonOption, CancellationToken cancellationToken); Task ListUserDungeonsAsync(int userId, CancellationToken cancellationToken); - Task ListUserDungeonsByNameAsync(string dungeonName, int userId, CancellationToken cancellationToken); + + Task ListUserDungeonsByNameAsync(string dungeonName, int userId, + CancellationToken cancellationToken); + Task AddDungeonAsync(DungeonModel savedDungeon, CancellationToken cancellationToken); Task DeleteDungeonOptionAsync(int id, CancellationToken cancellationToken); Task DeleteDungeonAsync(int id, CancellationToken cancellationToken); - Task GenerateDungeonAsync(DungeonOptionModel model); + Task GenerateDungeonAsync(DungeonOptionModel model, CancellationToken cancellationToken); Task RenameDungeonAsync(int optionId, int userId, string newName, CancellationToken cancellationToken); Task ExportToJsonAsync(int dungeonId, CancellationToken cancellationToken); } \ No newline at end of file diff --git a/src/Open5ETools.Core/Services/DM/DungeonService.cs b/src/Open5ETools.Core/Services/DM/DungeonService.cs index 3f1782a..21adb72 100644 --- a/src/Open5ETools.Core/Services/DM/DungeonService.cs +++ b/src/Open5ETools.Core/Services/DM/DungeonService.cs @@ -111,7 +111,7 @@ public async Task CreateOrUpdateDungeonAsync(DungeonOptionModel op private async Task UpdateExistingDungeonAsync(DungeonOptionModel optionModel, DungeonOptionModel existingDungeonOption, DungeonModel oldDungeon, CancellationToken cancellationToken) { - var dungeonModel = await GenerateDungeonAsync(optionModel, existingDungeonOption.Id); + var dungeonModel = await GenerateDungeonAsync(optionModel, existingDungeonOption.Id, cancellationToken); dungeonModel.Id = oldDungeon.Id; dungeonModel.Level = oldDungeon.Level; await UpdateDungeonAsync(dungeonModel, cancellationToken); @@ -122,7 +122,7 @@ private async Task CreateOptionAndAddDungeonToItAsync(DungeonOptio CancellationToken cancellationToken) { var dungeonOptionId = await CreateDungeonOptionAsync(optionModel, cancellationToken); - var dungeonModel = await GenerateDungeonAsync(optionModel, dungeonOptionId); + var dungeonModel = await GenerateDungeonAsync(optionModel, dungeonOptionId, cancellationToken); dungeonModel.Level = 1; var id = await AddDungeonAsync(dungeonModel, cancellationToken); dungeonModel.Id = id; @@ -135,7 +135,7 @@ private async Task AddDungeonToExistingOptionAsync(DungeonOptionMo var existingDungeons = (await ListUserDungeonsByNameAsync(optionModel.DungeonName, optionModel.UserId, cancellationToken)) .ToList(); - var dungeonModel = await GenerateDungeonAsync(optionModel, optionModel.Id); + var dungeonModel = await GenerateDungeonAsync(optionModel, optionModel.Id, cancellationToken); dungeonModel.Level = level; if (existingDungeons.Exists(d => d.Level == level)) { @@ -150,21 +150,23 @@ private async Task AddDungeonToExistingOptionAsync(DungeonOptionMo return dungeonModel; } - private async Task GenerateDungeonAsync(DungeonOptionModel optionModel, int optionId) + private async Task GenerateDungeonAsync(DungeonOptionModel optionModel, int optionId, + CancellationToken cancellationToken) { - var dungeonModel = await GenerateDungeonAsync(optionModel); + var dungeonModel = await GenerateDungeonAsync(optionModel, cancellationToken); dungeonModel.DungeonOptionId = optionId; return dungeonModel; } - public async Task GenerateDungeonAsync(DungeonOptionModel model) + public async Task GenerateDungeonAsync(DungeonOptionModel model, CancellationToken cancellationToken) { try { ValidateModel(model); if (model.Corridor) - return await Task.FromResult(_dungeon.Generate(model)); - return await Task.FromResult(_dungeonNcDungeon.Generate(model)); + return await Task.Run(async () => await Task.FromResult(_dungeon.Generate(model)), cancellationToken); + return await Task.Run(async () => await Task.FromResult(_dungeonNcDungeon.Generate(model)), + cancellationToken); } catch (Exception ex) { diff --git a/src/Open5ETools.Infrastructure/Data/AppDbContextInitializer.cs b/src/Open5ETools.Infrastructure/Data/AppDbContextInitializer.cs index 299bfbf..f81a835 100644 --- a/src/Open5ETools.Infrastructure/Data/AppDbContextInitializer.cs +++ b/src/Open5ETools.Infrastructure/Data/AppDbContextInitializer.cs @@ -50,7 +50,7 @@ public async Task SeedDataAsync(CancellationToken cancellationToken) await SeedMonstersAsync(cancellationToken); await SeedTreasuresAsync(cancellationToken); await SeedOptionsAsync(cancellationToken); - await SeedDungeonsAsync(1, cancellationToken); + await SeedDungeonsAsync(TestAdminUserId, cancellationToken); await SeedSpellsAsync(cancellationToken); } } @@ -59,12 +59,12 @@ public async Task SeedTestBaseAsync(CancellationToken cancellationToken) { if (!_context.Users.Any()) { - await SeedUsersAsync(cancellationToken); + await SeedUsersAsync(cancellationToken, true); await SeedMonstersAsync(cancellationToken); await SeedTreasuresAsync(cancellationToken); await SeedOptionsAsync(cancellationToken); - await SeedDungeonsAsync(1, cancellationToken); - await SeedDungeonsAsync(2, cancellationToken); + await SeedDungeonsAsync(TestAdminUserId, cancellationToken); + await SeedDungeonsAsync(TestUserId, cancellationToken); await SeedSpellsAsync(cancellationToken); } } @@ -516,7 +516,7 @@ private async Task SeedDungeonsAsync(int userId, CancellationToken token) UserId = dungeonOption.UserId }; - var sd = await _dungeonService.GenerateDungeonAsync(model); + var sd = await _dungeonService.GenerateDungeonAsync(model, token); sd.Level = 1; await _dungeonService.AddDungeonAsync(sd, token); @@ -563,12 +563,12 @@ private async Task SeedDungeonsAsync(int userId, CancellationToken token) UserId = dungeonOption.UserId }; - sd = await _dungeonService.GenerateDungeonAsync(model); + sd = await _dungeonService.GenerateDungeonAsync(model, token); sd.Level = 1; await _dungeonService.AddDungeonAsync(sd, token); } - private async Task SeedUsersAsync(CancellationToken token) + private async Task SeedUsersAsync(CancellationToken token, bool seedDeletedUtUser = false) { _context.Users.Add(new User { @@ -592,17 +592,20 @@ private async Task SeedUsersAsync(CancellationToken token) Role = Role.User }); - _context.Users.Add(new User + if (seedDeletedUtUser) { - Id = TestDeletedUserId, - Username = "UT Deleted User", - Password = PasswordHelper.EncryptPassword(config.Value.DefaultUserPassword), - FirstName = "Test", - LastName = "User", - Email = "user@user.com", - Role = Role.User, - IsDeleted = true - }); + _context.Users.Add(new User + { + Id = TestDeletedUserId, + Username = "UT Deleted User", + Password = PasswordHelper.EncryptPassword(config.Value.DefaultUserPassword), + FirstName = "Test", + LastName = "User", + Email = "user@user.com", + Role = Role.User, + IsDeleted = true + }); + } await _context.SaveChangesAsync(token); } diff --git a/src/Open5ETools.Web/Open5ETools.Web.csproj b/src/Open5ETools.Web/Open5ETools.Web.csproj index a657c20..4c6ee81 100644 --- a/src/Open5ETools.Web/Open5ETools.Web.csproj +++ b/src/Open5ETools.Web/Open5ETools.Web.csproj @@ -2,7 +2,7 @@ true true - 1.0.4.1 + 1.0.4.2 diff --git a/tests/Open5ETools.Core.Tests/DungeonServiceTests/Create.cs b/tests/Open5ETools.Core.Tests/DungeonServiceTests/Create.cs index e0fd2f6..a8fc5b8 100644 --- a/tests/Open5ETools.Core.Tests/DungeonServiceTests/Create.cs +++ b/tests/Open5ETools.Core.Tests/DungeonServiceTests/Create.cs @@ -32,7 +32,8 @@ public async Task CreateDungeonOptionAsync_WithOptionModel_ReturnsNewEntityId() Corridor = false, UserId = 1 }; - var result = await _dungeonService.CreateDungeonOptionAsync(optionsModel, TestContext.Current.CancellationToken); + var result = + await _dungeonService.CreateDungeonOptionAsync(optionsModel, TestContext.Current.CancellationToken); result.ShouldBeGreaterThan(0); } @@ -41,7 +42,7 @@ public async Task AddDungeonAsync_WithDungeonModel_ReturnsNewEntityId() { var optionsModel = (await _dungeonService.GetAllDungeonOptionsForUserAsync(1, TestContext.Current.CancellationToken)).First(); - var dungeon = await _dungeonService.GenerateDungeonAsync(optionsModel); + var dungeon = await _dungeonService.GenerateDungeonAsync(optionsModel, TestContext.Current.CancellationToken); var result = await _dungeonService.AddDungeonAsync(dungeon, TestContext.Current.CancellationToken); result.ShouldBeGreaterThan(1); @@ -63,7 +64,8 @@ public async Task CreateOrUpdateDungeonAsync_WithInvalidModel_ReturnsServiceAggr var act = async () => { - await _dungeonService.CreateOrUpdateDungeonAsync(optionsModel, false, 1, TestContext.Current.CancellationToken); + await _dungeonService.CreateOrUpdateDungeonAsync(optionsModel, false, 1, + TestContext.Current.CancellationToken); }; var result = await act.ShouldThrowAsync(); @@ -97,7 +99,8 @@ public async Task CreateOrUpdateDungeonAsync_WithValidNewModel_CreateOptionAndRe UserId = 1 }; var result = - await _dungeonService.CreateOrUpdateDungeonAsync(optionsModel, false, 1, TestContext.Current.CancellationToken); + await _dungeonService.CreateOrUpdateDungeonAsync(optionsModel, false, 1, + TestContext.Current.CancellationToken); result.ShouldNotBeNull(); result.RoamingMonsterDescription.ShouldBe(Constants.Empty); } @@ -109,7 +112,8 @@ public async Task const int userId = 1; const int levelNumber = 2; var existingDungeonOption = - (await _dungeonService.GetAllDungeonOptionsForUserAsync(userId, TestContext.Current.CancellationToken)).First(); + (await _dungeonService.GetAllDungeonOptionsForUserAsync(userId, TestContext.Current.CancellationToken)) + .First(); var currentDungeonCount = (await _dungeonService.ListUserDungeonsByNameAsync(existingDungeonOption.DungeonName, userId, TestContext.Current.CancellationToken)).Count(); diff --git a/tests/Open5ETools.Core.Tests/DungeonServiceTests/Generate.cs b/tests/Open5ETools.Core.Tests/DungeonServiceTests/Generate.cs index f568b49..1a27787 100644 --- a/tests/Open5ETools.Core.Tests/DungeonServiceTests/Generate.cs +++ b/tests/Open5ETools.Core.Tests/DungeonServiceTests/Generate.cs @@ -29,7 +29,7 @@ public async Task GenerateDungeonAsync_WithValidOptionModel_ReturnsDungeonModel( RoomSize = 20, Corridor = false, UserId = 1 - }); + }, TestContext.Current.CancellationToken); result.DungeonTiles.ShouldNotBeNull(); }