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