diff --git a/src/PostIt/PostIt.Tests/HomePageProviderFlowTests.cs b/src/PostIt/PostIt.Tests/HomePageProviderFlowTests.cs index cf159b938..8b55af7b7 100644 --- a/src/PostIt/PostIt.Tests/HomePageProviderFlowTests.cs +++ b/src/PostIt/PostIt.Tests/HomePageProviderFlowTests.cs @@ -45,9 +45,9 @@ public class HomePageProviderFlowTests public void Administration_page_filters_users_by_search_text() { var vm = new AdministrationPageViewModel(); - vm.Users.Add(new Yavsc.Abstract.Identity.UserInfo { UserId = "1", UserName = "alice" }); - vm.Users.Add(new Yavsc.Abstract.Identity.UserInfo { UserId = "2", UserName = "bob" }); - vm.Users.Add(new Yavsc.Abstract.Identity.UserInfo { UserId = "3", UserName = "carol" }); + vm.Users.Add(new Yavsc.Abstract.Identity.UserInfo { UserId = "1", UserName = "alice", FullName = "Alice Example" }); + vm.Users.Add(new Yavsc.Abstract.Identity.UserInfo { UserId = "2", UserName = "bob", FullName = "Bob Jones" }); + vm.Users.Add(new Yavsc.Abstract.Identity.UserInfo { UserId = "3", UserName = "carol", FullName = "Carol Smith" }); vm.SearchText = "ali"; @@ -55,6 +55,19 @@ public class HomePageProviderFlowTests Assert.Equal("alice", vm.FilteredUsers[0].UserName); } + [Fact] + public void Administration_page_filters_users_by_full_name() + { + var vm = new AdministrationPageViewModel(); + vm.Users.Add(new Yavsc.Abstract.Identity.UserInfo { UserId = "1", UserName = "alice", FullName = "Alice Example" }); + vm.Users.Add(new Yavsc.Abstract.Identity.UserInfo { UserId = "2", UserName = "bob", FullName = "Bob Jones" }); + + vm.SearchText = "example"; + + Assert.Single(vm.FilteredUsers); + Assert.Equal("alice", vm.FilteredUsers[0].UserName); + } + [Fact] public void UserProfilePage_exposes_full_name_and_address_fields() { diff --git a/src/PostIt/PostIt/ViewModels/AdministrationPageViewModel.cs b/src/PostIt/PostIt/ViewModels/AdministrationPageViewModel.cs index 596064aa7..7ef626c56 100644 --- a/src/PostIt/PostIt/ViewModels/AdministrationPageViewModel.cs +++ b/src/PostIt/PostIt/ViewModels/AdministrationPageViewModel.cs @@ -32,6 +32,7 @@ public partial class AdministrationPageViewModel : ViewModelBase ? Users.ToList() : Users.Where(user => (user.UserName ?? string.Empty).Contains(SearchText, StringComparison.OrdinalIgnoreCase) + || (user.FullName ?? string.Empty).Contains(SearchText, StringComparison.OrdinalIgnoreCase) || (user.Email ?? string.Empty).Contains(SearchText, StringComparison.OrdinalIgnoreCase) || (user.UserId ?? string.Empty).Contains(SearchText, StringComparison.OrdinalIgnoreCase)) .ToList(); diff --git a/src/PostIt/PostIt/Views/Layout/AdministrationPage.axaml b/src/PostIt/PostIt/Views/Layout/AdministrationPage.axaml index fe2305f16..692b4972c 100644 --- a/src/PostIt/PostIt/Views/Layout/AdministrationPage.axaml +++ b/src/PostIt/PostIt/Views/Layout/AdministrationPage.axaml @@ -31,7 +31,9 @@ + + diff --git a/src/Yavsc.Api/Controllers/accounting/ApplicationUserApiController.cs b/src/Yavsc.Api/Controllers/accounting/ApplicationUserApiController.cs index 837e7f1eb..8850cba59 100644 --- a/src/Yavsc.Api/Controllers/accounting/ApplicationUserApiController.cs +++ b/src/Yavsc.Api/Controllers/accounting/ApplicationUserApiController.cs @@ -22,22 +22,49 @@ namespace Yavsc.Controllers [HttpGet] public IEnumerable GetApplicationUser(int skip=0, int take = 25) { - return _context.Users.Skip(skip).Take(take) - .Select(u=> new UserInfo{ - UserId = u.Id, - UserName = u.UserName, - Avatar = u.Avatar}); + return _context.Users + .Include(u => u.PostalAddress) + .Include(u => u.BankInfo) + .Skip(skip).Take(take) + .Select(u => new UserInfo + { + UserId = u.Id, + UserName = u.UserName, + FullName = u.FullName, + Email = u.Email, + Address = u.PostalAddress != null ? u.PostalAddress.Address : string.Empty, + Avatar = u.Avatar, + DedicatedGoogleCalendar = u.DedicatedGoogleCalendar, + BankInfoSummary = u.BankInfo != null && u.BankInfo.Count > 0 + ? string.Join(" | ", u.BankInfo.Select(b => string.IsNullOrWhiteSpace(b.IBAN) ? b.BIC : $"{b.IBAN} / {b.BIC}")) + : string.Empty + }); } [HttpGet("search/{pattern}")] public IEnumerable SearchApplicationUser(string pattern, int skip=0, int take = 25) { - return _context.Users.Where(u => u.UserName.Contains(pattern)) - .Skip(skip).Take(take) - .Select(u=> new UserInfo { - UserId = u.Id, - UserName = u.UserName, - Avatar = u.Avatar }); + var normalizedPattern = pattern ?? string.Empty; + return _context.Users + .Include(u => u.PostalAddress) + .Include(u => u.BankInfo) + .Where(u => u.UserName.Contains(normalizedPattern) + || (u.FullName != null && u.FullName.Contains(normalizedPattern)) + || (u.Email != null && u.Email.Contains(normalizedPattern))) + .Skip(skip).Take(take) + .Select(u => new UserInfo + { + UserId = u.Id, + UserName = u.UserName, + FullName = u.FullName, + Email = u.Email, + Address = u.PostalAddress != null ? u.PostalAddress.Address : string.Empty, + Avatar = u.Avatar, + DedicatedGoogleCalendar = u.DedicatedGoogleCalendar, + BankInfoSummary = u.BankInfo != null && u.BankInfo.Count > 0 + ? string.Join(" | ", u.BankInfo.Select(b => string.IsNullOrWhiteSpace(b.IBAN) ? b.BIC : $"{b.IBAN} / {b.BIC}")) + : string.Empty + }); } // GET: api/ApplicationUserApi/5