From 682346521e91982c9492db64661700de339b7a52 Mon Sep 17 00:00:00 2001 From: shiibe <82057235+shiibe@users.noreply.github.com> Date: Wed, 5 Jun 2024 20:38:52 -0400 Subject: [PATCH] Add search to users api --- .../Controllers/Api/UsersController.cs | 4 ++-- TaikoLocalServer/Services/AuthService.cs | 23 ++++++++++++++----- .../Services/Interfaces/IAuthService.cs | 2 +- TaikoWebUI/Pages/Users.razor | 5 +++- TaikoWebUI/Pages/Users.razor.cs | 12 ++++++++-- 5 files changed, 34 insertions(+), 12 deletions(-) diff --git a/TaikoLocalServer/Controllers/Api/UsersController.cs b/TaikoLocalServer/Controllers/Api/UsersController.cs index eaf84ec..dd2a4d3 100644 --- a/TaikoLocalServer/Controllers/Api/UsersController.cs +++ b/TaikoLocalServer/Controllers/Api/UsersController.cs @@ -37,7 +37,7 @@ public class UsersController(IUserDatumService userDatumService, IAuthService au [HttpGet] [ServiceFilter(typeof(AuthorizeIfRequiredAttribute))] - public async Task> GetUsers([FromQuery] int page = 1, [FromQuery] int limit = 10) + public async Task> GetUsers([FromQuery] int page = 1, [FromQuery] int limit = 10, [FromQuery] string? searchTerm = null) { if (page < 1) { @@ -63,7 +63,7 @@ public class UsersController(IUserDatumService userDatumService, IAuthService au } } - return await authService.GetUsersFromCards(page, limit); + return await authService.GetUsersFromCards(page, limit, searchTerm); } [HttpDelete("{baid}")] diff --git a/TaikoLocalServer/Services/AuthService.cs b/TaikoLocalServer/Services/AuthService.cs index d12a3e3..acd3dd1 100644 --- a/TaikoLocalServer/Services/AuthService.cs +++ b/TaikoLocalServer/Services/AuthService.cs @@ -30,13 +30,25 @@ public class AuthService(TaikoDbContext context) : IAuthService }; } - public async Task GetUsersFromCards(int page = 1, int limit = 12) + public async Task GetUsersFromCards(int page = 1, int limit = 12, string? searchTerm = null) { - // Get the total count of users - var totalUsers = await context.UserData.CountAsync(); - var users = new List(); + var cardEntries = await context.Cards.ToListAsync(); + var userEntriesQuery = context.UserData.AsQueryable(); + + // If a search term is provided, filter the users based on the search term + if (!string.IsNullOrEmpty(searchTerm)) + { + var lowerCaseSearchTerm = searchTerm.ToLower(); + userEntriesQuery = userEntriesQuery.Where(user => user.Baid.ToString() == lowerCaseSearchTerm + || user.MyDonName.ToLower().Contains(lowerCaseSearchTerm) + || context.Cards.Any(card => card.Baid == user.Baid && card.AccessCode == lowerCaseSearchTerm)); + } + + // Get the total count of users after applying the search term + var totalUsers = await userEntriesQuery.CountAsync(); + // Calculate the total pages var totalPages = totalUsers / limit; @@ -46,8 +58,7 @@ public class AuthService(TaikoDbContext context) : IAuthService totalPages++; } - var cardEntries = await context.Cards.ToListAsync(); - var userEntries = await context.UserData + var userEntries = await userEntriesQuery .OrderBy(user => user.Baid) .Skip((page - 1) * limit) .Take(limit) diff --git a/TaikoLocalServer/Services/Interfaces/IAuthService.cs b/TaikoLocalServer/Services/Interfaces/IAuthService.cs index 3f69b9a..7e0d907 100644 --- a/TaikoLocalServer/Services/Interfaces/IAuthService.cs +++ b/TaikoLocalServer/Services/Interfaces/IAuthService.cs @@ -9,7 +9,7 @@ public interface IAuthService public Task GetCardByAccessCode(string accessCode); - public Task GetUsersFromCards(int page = 0, int limit = 12); + public Task GetUsersFromCards(int page = 0, int limit = 12, string? searchTerm = null); public Task AddCard(Card card); diff --git a/TaikoWebUI/Pages/Users.razor b/TaikoWebUI/Pages/Users.razor index d7c9106..62ab57f 100644 --- a/TaikoWebUI/Pages/Users.razor +++ b/TaikoWebUI/Pages/Users.razor @@ -9,7 +9,10 @@ @Localizer["Users"] @if (!AuthService.LoginRequired || (AuthService.LoginRequired && AuthService.IsAdmin)) { - if (isLoading == true || response == null) + + + + @if (isLoading || response == null) { // Loading... for (uint i = 0; i < pageSize; i++) { diff --git a/TaikoWebUI/Pages/Users.razor.cs b/TaikoWebUI/Pages/Users.razor.cs index 704b1f2..3688b96 100644 --- a/TaikoWebUI/Pages/Users.razor.cs +++ b/TaikoWebUI/Pages/Users.razor.cs @@ -7,12 +7,13 @@ public partial class Users private int TotalPages { get; set; } = 0; private bool isLoading = true; private int currentPage = 1; - private int pageSize = 12; + private readonly int pageSize = 12; + private string? searchTerm = null; private async Task GetUsersData() { isLoading = true; - response = await Client.GetFromJsonAsync($"api/Users?page={currentPage}&limit={pageSize}"); + response = await Client.GetFromJsonAsync($"api/Users?page={currentPage}&limit={pageSize}&searchTerm={searchTerm}"); response.ThrowIfNull(); TotalPages = response.TotalPages; @@ -38,4 +39,11 @@ public partial class Users currentPage = page; await GetUsersData(); } + + private async Task OnSearch(string search) + { + searchTerm = search; + currentPage = 1; + await GetUsersData(); + } } \ No newline at end of file