From 2a26e7f8b5262e894688630dcd0f27602b6261d8 Mon Sep 17 00:00:00 2001 From: "t.ruspekhofer" Date: Sun, 6 Mar 2022 23:33:31 +0100 Subject: [PATCH] reworked account pages --- Lieb/Data/GuildWars2AccountService.cs | 89 ++++++++----- Lieb/Data/UserService.cs | 65 +++++----- Lieb/Pages/User/ManageAccount.razor | 36 +++--- Lieb/Pages/User/ManageGuildWars2Account.razor | 122 +++++++----------- Lieb/Pages/User/UserEdit.razor | 74 +++++++---- Lieb/Pages/User/UserOverview.razor | 9 +- Lieb/Shared/MainLayout.razor | 1 - 7 files changed, 214 insertions(+), 182 deletions(-) diff --git a/Lieb/Data/GuildWars2AccountService.cs b/Lieb/Data/GuildWars2AccountService.cs index bab7dd3..a5ddc3a 100644 --- a/Lieb/Data/GuildWars2AccountService.cs +++ b/Lieb/Data/GuildWars2AccountService.cs @@ -29,8 +29,7 @@ namespace Lieb.Data using var context = _contextFactory.CreateDbContext(); if (account.GuildWars2AccountId == 0) { - //context.GuildWars2Accounts.Add(account); - LiebUser user = context.LiebUsers.FirstOrDefault(u => u.LiebUserId == userId); + LiebUser? user = context.LiebUsers.FirstOrDefault(u => u.LiebUserId == userId); if(user != null) { user.GuildWars2Accounts.Add(account); @@ -39,43 +38,21 @@ namespace Lieb.Data } else { - GuildWars2Account accountToChange = context.GuildWars2Accounts + GuildWars2Account? accountToChange = context.GuildWars2Accounts .Include(a => a.EquippedBuilds) - .Include(e => e.EquippedBuilds) .FirstOrDefault(a => a.GuildWars2AccountId == account.GuildWars2AccountId); - accountToChange.AccountName = account.AccountName; - accountToChange.ApiKey = account.ApiKey; + if (accountToChange != null) + { + accountToChange.AccountName = account.AccountName; + accountToChange.ApiKey = account.ApiKey; - List toDelete = new List(); - foreach (Equipped equipped in accountToChange.EquippedBuilds) - { - Equipped? newEquipped = account.EquippedBuilds.FirstOrDefault(r => r.EquippedId == equipped.EquippedId); - if (newEquipped != null) - { - equipped.CanTank = newEquipped.CanTank; - } - else - { - toDelete.Add(equipped); - } + await context.SaveChangesAsync(); } - foreach(Equipped equipped in toDelete) - { - accountToChange.EquippedBuilds.Remove(equipped); - context.Equipped.Remove(equipped); - } - foreach (Equipped equipped in account.EquippedBuilds.Where(r => r.EquippedId == 0)) - { - accountToChange.EquippedBuilds.Add(equipped); - } - - await context.SaveChangesAsync(); } } } - public async Task DeleteAccount(int accountId) { using var context = _contextFactory.CreateDbContext(); @@ -88,5 +65,57 @@ namespace Lieb.Data await context.SaveChangesAsync(); } } + + public async Task AddBuild(int accountId, int buildId) + { + using var context = _contextFactory.CreateDbContext(); + GuildWars2Account? account = context.GuildWars2Accounts + .Include(a => a.EquippedBuilds) + .FirstOrDefault(a => a.GuildWars2AccountId == accountId); + + if (account != null) + { + account.EquippedBuilds.Add(new Equipped() + { + GuildWars2AccountId = accountId, + GuildWars2BuildId = buildId + }); + await context.SaveChangesAsync(); + } + } + + public async Task RemoveBuild(int accountId, int buildId) + { + using var context = _contextFactory.CreateDbContext(); + GuildWars2Account? account = context.GuildWars2Accounts + .Include(a => a.EquippedBuilds) + .FirstOrDefault(a => a.GuildWars2AccountId == accountId); + if (account != null) + { + Equipped? buildToRemove = account.EquippedBuilds.FirstOrDefault(b => b.GuildWars2BuildId == buildId); + if (buildToRemove != null) + { + account.EquippedBuilds.Remove(buildToRemove); + await context.SaveChangesAsync(); + } + } + } + + public async Task ChangeTankStatus(int accountId, int buildId, bool canTank) + { + using var context = _contextFactory.CreateDbContext(); + GuildWars2Account? account = context.GuildWars2Accounts + .Include(a => a.EquippedBuilds) + .FirstOrDefault(a => a.GuildWars2AccountId == accountId); + if (account != null) + { + Equipped? build = account.EquippedBuilds.FirstOrDefault(b => b.GuildWars2BuildId == buildId); + if (build != null) + { + build.CanTank = canTank; + await context.SaveChangesAsync(); + } + } + } } } diff --git a/Lieb/Data/UserService.cs b/Lieb/Data/UserService.cs index 6966953..60b5bcb 100644 --- a/Lieb/Data/UserService.cs +++ b/Lieb/Data/UserService.cs @@ -103,43 +103,46 @@ namespace Lieb.Data await context.SaveChangesAsync(); } - public async Task EditUserRoles(LiebUser user) + public async Task UpdateBannedUntil(int userId, DateTime? date) { - if (user != null) - { - using var context = _contextFactory.CreateDbContext(); - LiebUser? userToChange = await context.LiebUsers - .Include(u => u.RoleAssignments) - .FirstOrDefaultAsync(u => u.LiebUserId == user.LiebUserId); + using var context = _contextFactory.CreateDbContext(); + LiebUser? user = await context.LiebUsers.FirstOrDefaultAsync(u => u.LiebUserId == userId); - if (userToChange == null) - return; + if (user == null) + return; - userToChange.BannedUntil = user.BannedUntil; + user.BannedUntil = date; - List toDelete = new List(); - foreach (RoleAssignment assignment in userToChange.RoleAssignments) - { - RoleAssignment? newAssignment = user.RoleAssignments.FirstOrDefault(r => r.RoleAssignmentId == assignment.RoleAssignmentId); - if (newAssignment == null) - { - toDelete.Add(assignment); - } - } - foreach (RoleAssignment assignment in toDelete) - { - userToChange.RoleAssignments.Remove(assignment); - context.RoleAssignments.Remove(assignment); - } - foreach (RoleAssignment assignment in user.RoleAssignments.Where(r => r.RoleAssignmentId == 0)) - { - userToChange.RoleAssignments.Add(assignment); - } - - await context.SaveChangesAsync(); - } + await context.SaveChangesAsync(); } + public async Task AddRoleToUser(int userId, int roleId) + { + using var context = _contextFactory.CreateDbContext(); + LiebUser? user = await context.LiebUsers + .Include(u => u.RoleAssignments) + .FirstOrDefaultAsync(u => u.LiebUserId == userId); + user.RoleAssignments.Add(new RoleAssignment() + { + LiebUserId = userId, + LiebRoleId = roleId + }); + await context.SaveChangesAsync(); + } + + public async Task RemoveRoleFromUser(int userId, int roleId) + { + using var context = _contextFactory.CreateDbContext(); + LiebUser? user = await context.LiebUsers + .Include(u => u.RoleAssignments) + .FirstOrDefaultAsync(u => u.LiebUserId == userId); + RoleAssignment assignmentToRemove = user.RoleAssignments.FirstOrDefault(r => r.LiebRoleId == roleId); + if(assignmentToRemove != null) + { + user.RoleAssignments.Remove(assignmentToRemove); + } + await context.SaveChangesAsync(); + } public List GetLiebRoles() { diff --git a/Lieb/Pages/User/ManageAccount.razor b/Lieb/Pages/User/ManageAccount.razor index 9a87b15..39f94e0 100644 --- a/Lieb/Pages/User/ManageAccount.razor +++ b/Lieb/Pages/User/ManageAccount.razor @@ -14,8 +14,8 @@ - +

@_saveMessage

- - - @foreach(GuildWars2Account account in _user.GuildWars2Accounts) - { - - } -
- + +
+ +
+ + + @foreach(GuildWars2Account account in _user.GuildWars2Accounts) + { + + }
@@ -61,6 +63,7 @@ @code { public LiebUser _user; + private string _saveMessage = string.Empty; protected override async Task OnInitializedAsync() { @@ -74,5 +77,6 @@ private async Task HandleValidSubmit() { await UserService.EditUser(_user); + _saveMessage = "changes saved successfully"; } } \ No newline at end of file diff --git a/Lieb/Pages/User/ManageGuildWars2Account.razor b/Lieb/Pages/User/ManageGuildWars2Account.razor index 2abae6e..80cad77 100644 --- a/Lieb/Pages/User/ManageGuildWars2Account.razor +++ b/Lieb/Pages/User/ManageGuildWars2Account.razor @@ -18,8 +18,8 @@ - +

@_saveMessage

- - +
+ + + +
+ + @if (_account.GuildWars2AccountId != 0) + { +
- + @@ -47,61 +54,34 @@ - @foreach (Equipped equippedBuild in _account.EquippedBuilds) - { - - - - - - - - - - - - } -
Equipped can Tank Build ClassQuick Alac
@equippedBuild.GuildWars2Build.BuildName@equippedBuild.GuildWars2Build.Class.ToString()@equippedBuild.GuildWars2Build.EliteSpecialization.ToString()@equippedBuild.GuildWars2Build.Might.ToString()@equippedBuild.GuildWars2Build.Heal.ToString()@equippedBuild.GuildWars2Build.Quickness.ToString()@equippedBuild.GuildWars2Build.Alacrity.ToString()
- -

- - - - - - - - - - - - @foreach (GuildWars2Build build in GuildWars2BuildService.GetBuilds()) { - if(!_account.EquippedBuilds.Where(e => e.GuildWars2BuildId == build.GuildWars2BuildId).Any()) + Equipped? equippedBuild = _account.EquippedBuilds.FirstOrDefault(e => e.GuildWars2BuildId == build.GuildWars2BuildId); + bool isEquipped = equippedBuild != null; + bool canTank = false; + if (isEquipped) { - - - - - - - - - - + canTank = equippedBuild.CanTank; } + + + + + + + + + + + + }
BuildClassEliteMightHealQuickAlac
@build.BuildName@build.Class.ToString()@build.EliteSpecialization.ToString()@build.Might.ToString()@build.Heal.ToString()@build.Quickness.ToString()@build.Alacrity.ToString()
@build.BuildName@build.Class.ToString()@build.EliteSpecialization.ToString()
-

- - -
- - - -
- + +
+ + } +
@@ -115,6 +95,8 @@ private LiebUser _user; + private string _saveMessage = string.Empty; + protected override async Task OnInitializedAsync() { var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); @@ -131,31 +113,24 @@ } } - async Task AddBuildlicked(GuildWars2Build build) + async Task EquippedStatusChanged(int buildId, ChangeEventArgs args) { - Equipped equipped = new Equipped() - { - GuildWars2AccountId = _account.GuildWars2AccountId, - GuildWars2Account = _account, - GuildWars2BuildId = build.GuildWars2BuildId, - GuildWars2Build = build - }; - _account.EquippedBuilds.Add(equipped); - } - - - async Task RemoveBuildClicked(int buildId) - { - Equipped equipped = _account.EquippedBuilds.FirstOrDefault(e => e.GuildWars2BuildId == buildId); - if (equipped != null) + bool isEquipped = bool.Parse(args.Value.ToString()); + if(isEquipped) { - _account.EquippedBuilds.Remove(equipped); + await GuildWars2AccountService.AddBuild(_account.GuildWars2AccountId, buildId); } + else + { + await GuildWars2AccountService.RemoveBuild(_account.GuildWars2AccountId, buildId); + } + _account = GuildWars2AccountService.GetAccount(_account.GuildWars2AccountId); } - async Task TankingStatusChanged(Equipped equipped, ChangeEventArgs args) + async Task TankingStatusChanged(int buildId, ChangeEventArgs args) { - equipped.CanTank =bool.Parse(args.Value.ToString()); + bool canTank = bool.Parse(args.Value.ToString()); + await GuildWars2AccountService.ChangeTankStatus(_account.GuildWars2AccountId, buildId, canTank); } async Task DeleteAccountClicked() @@ -171,6 +146,7 @@ private async Task HandleValidSubmit() { await GuildWars2AccountService.AddOrEditAccount(_account, _user.LiebUserId); - NavigationManager.NavigateTo("accountedit"); + _account = GuildWars2AccountService.GetAccount(_account.GuildWars2AccountId); + _saveMessage = "changes saved successfully"; } } \ No newline at end of file diff --git a/Lieb/Pages/User/UserEdit.razor b/Lieb/Pages/User/UserEdit.razor index 958aecb..14df03c 100644 --- a/Lieb/Pages/User/UserEdit.razor +++ b/Lieb/Pages/User/UserEdit.razor @@ -19,43 +19,51 @@ +

@_submitMessage

+ + @if (_user.BannedUntil >= DateTime.Now.Date) + { + + } + else + { + + }

- - - - - - - @foreach (LiebRole role in _roles) - { - - @{ - bool hasRole = _user.RoleAssignments.Where(a => a.LiebRoleId == role.LiebRoleId).Any(); - bool disabled = _editingUserRights < role.LevelToAssign; - } - - - @if(@role.IsSystemRole) - { - - } - - } -
RoleIsSystemRole
@role.RoleNameTrue
-
- - + + + + + + + @foreach (LiebRole role in _roles) + { + + @{ + bool hasRole = _user.RoleAssignments.Where(a => a.LiebRoleId == role.LiebRoleId).Any(); + bool disabled = _editingUserRights < role.LevelToAssign; + } + + + @if(@role.IsSystemRole) + { + + } + + } +
RoleIsSystemRole
@role.RoleNameTrue
+
+ @code { [Parameter] @@ -64,6 +72,7 @@ private LiebUser _user; private int _editingUserRights = 0; private List _roles; + private string _submitMessage = string.Empty; protected override async Task OnInitializedAsync() { @@ -101,17 +110,26 @@ LiebRoleId = role.LiebRoleId, LiebUserId = _user.LiebUserId }; + await UserService.AddRoleToUser(_user.LiebUserId, role.LiebRoleId); _user.RoleAssignments.Add(roleAssignment); } else if(!isChecked && assignment != null) { + await UserService.RemoveRoleFromUser(_user.LiebUserId, role.LiebRoleId); _user.RoleAssignments.Remove(assignment); } } private async Task HandleValidSubmit() { - await UserService.EditUserRoles(_user); - NavigationManager.NavigateTo("useroverview"); + await UserService.UpdateBannedUntil(_user.LiebUserId, _user.BannedUntil); + if(_user.BannedUntil >= DateTime.Now.Date) + { + _submitMessage = "user banned successfully"; + } + else + { + _submitMessage = "user unbanned successfully"; + } } } \ No newline at end of file diff --git a/Lieb/Pages/User/UserOverview.razor b/Lieb/Pages/User/UserOverview.razor index e870736..c48814a 100644 --- a/Lieb/Pages/User/UserOverview.razor +++ b/Lieb/Pages/User/UserOverview.razor @@ -38,11 +38,11 @@ HashSet foundUsers = new HashSet(); if(_bannedOnly) { - foreach(LiebUser user in _users.Where(u => u.Name.Contains(_searchString, StringComparison.OrdinalIgnoreCase) && u.BannedUntil > DateTime.Now)) + foreach(LiebUser user in _users.Where(u => u.Name.Contains(_searchString, StringComparison.OrdinalIgnoreCase) && u.BannedUntil >= DateTime.Now.Date)) { foundUsers.Add(user); } - foreach(LiebUser user in _users.Where(u => u.GuildWars2Accounts.Where(a => a.AccountName.Contains(_searchString, StringComparison.OrdinalIgnoreCase)).Any() && u.BannedUntil > DateTime.Now)) + foreach(LiebUser user in _users.Where(u => u.GuildWars2Accounts.Where(a => a.AccountName.Contains(_searchString, StringComparison.OrdinalIgnoreCase)).Any() && u.BannedUntil >= DateTime.Now.Date)) { foundUsers.Add(user); } @@ -67,7 +67,10 @@ @user.Name @foreach(var account in user.GuildWars2Accounts){
@account.AccountName
} - @user.BannedUntil?.ToLongDateString() + @if(user.BannedUntil >= DateTime.Now.Date) + { + @user.BannedUntil?.ToLongDateString() + } } diff --git a/Lieb/Shared/MainLayout.razor b/Lieb/Shared/MainLayout.razor index 40400e8..ca4c3e3 100644 --- a/Lieb/Shared/MainLayout.razor +++ b/Lieb/Shared/MainLayout.razor @@ -14,7 +14,6 @@