diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index 52e0589..9b49119 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -66,7 +66,7 @@ namespace MarcoBMS.Services.Controllers /// An ApiResponse containing a list of projects or an error. [HttpGet("list")] - public async Task GetAllProjects([FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20) + public async Task GetAllProjects([FromQuery] string? searchString, [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20) { // --- Input Validation and Initial Setup --- if (!ModelState.IsValid) @@ -79,7 +79,7 @@ namespace MarcoBMS.Services.Controllers return BadRequest(ApiResponse.ErrorResponse("Invalid request data provided.", errors, 400)); } var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); - var response = await _projectServices.GetAllProjectsAsync(pageNumber, pageSize, loggedInEmployee, tenantId); + var response = await _projectServices.GetAllProjectsAsync(searchString, pageNumber, pageSize, loggedInEmployee, tenantId); return StatusCode(response.StatusCode, response); } diff --git a/Marco.Pms.Services/Service/ProjectServices.cs b/Marco.Pms.Services/Service/ProjectServices.cs index 7689898..2370016 100644 --- a/Marco.Pms.Services/Service/ProjectServices.cs +++ b/Marco.Pms.Services/Service/ProjectServices.cs @@ -173,7 +173,7 @@ namespace Marco.Pms.Services.Service return ApiResponse.ErrorResponse("An internal server error occurred. Please try again later.", null, 500); } } - public async Task> GetAllProjectsAsync(int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId) + public async Task> GetAllProjectsAsync(string? searchString, int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId) { try { @@ -223,6 +223,14 @@ namespace Marco.Pms.Services.Service var totalEntites = responseVms.Count; var totalPages = (int)Math.Ceiling((double)totalEntites / pageSize); + if (!string.IsNullOrWhiteSpace(searchString)) + { + var normalized = searchString.Trim().ToLowerInvariant(); + responseVms = responseVms + .Where(p => p.Name!.ToLower().Contains(normalized) || + (!string.IsNullOrWhiteSpace(p.ShortName) && p.ShortName.ToLower().Contains(normalized))).ToList(); + } + responseVms = responseVms .OrderBy(p => p.Name) .Skip((pageNumber - 1) * pageSize) diff --git a/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs b/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs index dac1921..98b36d6 100644 --- a/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs +++ b/Marco.Pms.Services/Service/ServiceInterfaces/IProjectServices.cs @@ -12,7 +12,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces { Task> GetBothProjectBasicListAsync(string? searchString, Employee loggedInEmployee, Guid tenantId); Task> GetAllProjectsBasicAsync(bool provideAll, Employee loggedInEmployee, Guid tenantId); - Task> GetAllProjectsAsync(int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId); + Task> GetAllProjectsAsync(string? searchString, int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId); Task> GetProjectAsync(Guid id, Employee loggedInEmployee, Guid tenantId); Task> GetProjectDetailsAsync(Guid id, Employee loggedInEmployee, Guid tenantId); Task> GetProjectDetailsOldAsync(Guid id, Employee loggedInEmployee, Guid tenantId);