Added filter by id as well in both project list API and basic Organization list API

This commit is contained in:
ashutosh.nehete 2025-11-27 15:13:26 +05:30
parent 0fe59223e2
commit 49da601092
6 changed files with 22 additions and 8 deletions

View File

@ -46,10 +46,10 @@ namespace Marco.Pms.Services.Controllers
}
[HttpGet("list/basic")]
public async Task<IActionResult> GetOrganizationBasicList([FromQuery] string? searchString, CancellationToken ct, [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20)
public async Task<IActionResult> GetOrganizationBasicList([FromQuery] Guid? id, [FromQuery] string? searchString, CancellationToken ct, [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20)
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _organizationService.GetOrganizationBasicListAsync(searchString, pageNumber, pageSize, loggedInEmployee, ct);
var response = await _organizationService.GetOrganizationBasicListAsync(id, searchString, pageNumber, pageSize, loggedInEmployee, ct);
return StatusCode(response.StatusCode, response);
}

View File

@ -41,11 +41,11 @@ namespace MarcoBMS.Services.Controllers
#region =================================================================== Project Get APIs ===================================================================
[HttpGet("list/basic/all")]
public async Task<IActionResult> GetBothProjectBasicList([FromQuery] string? searchString)
public async Task<IActionResult> GetBothProjectBasicList([FromQuery] Guid? id, [FromQuery] string? searchString)
{
// Get the current user
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _projectServices.GetBothProjectBasicListAsync(searchString, loggedInEmployee, tenantId);
var response = await _projectServices.GetBothProjectBasicListAsync(id, searchString, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response);
}

View File

@ -163,7 +163,7 @@ namespace Marco.Pms.Services.Service
/// <param name="loggedInEmployee">The current user context for security filtering.</param>
/// <param name="ct">Cancellation token to cancel operations if the client disconnects.</param>
/// <returns>A paginated list of BasicOrganizationVm.</returns>
public async Task<ApiResponse<object>> GetOrganizationBasicListAsync(string? searchString, int pageNumber, int pageSize, Employee loggedInEmployee, CancellationToken ct = default)
public async Task<ApiResponse<object>> GetOrganizationBasicListAsync(Guid? id, string? searchString, int pageNumber, int pageSize, Employee loggedInEmployee, CancellationToken ct = default)
{
try
{
@ -188,6 +188,11 @@ namespace Marco.Pms.Services.Service
query = query.Where(o => o.Name.Contains(searchTrimmed));
}
if (id.HasValue)
{
query = query.Where(o => o.Id == id.Value);
}
// 5. COUNT TOTALS (Efficiently)
// Count the total records matching the filter BEFORE applying pagination
var totalCount = await query.CountAsync(ct);

View File

@ -61,7 +61,7 @@ namespace Marco.Pms.Services.Service
/// <param name="loggedInEmployee">Authenticated employee requesting the data.</param>
/// <param name="tenantId">Tenant identifier to ensure multi-tenant data isolation.</param>
/// <returns>Returns an ApiResponse containing the distinct combined list of basic project view models or an error response.</returns>
public async Task<ApiResponse<object>> GetBothProjectBasicListAsync(string? searchString, Employee loggedInEmployee, Guid tenantId)
public async Task<ApiResponse<object>> GetBothProjectBasicListAsync(Guid? id, string? searchString, Employee loggedInEmployee, Guid tenantId)
{
if (tenantId == Guid.Empty)
{
@ -88,6 +88,10 @@ namespace Marco.Pms.Services.Service
.Where(p => p.Name.ToLower().Contains(normalized) ||
(!string.IsNullOrWhiteSpace(p.ShortName) && p.ShortName.ToLower().Contains(normalized)));
}
if (id.HasValue)
{
infraProjectsQuery = infraProjectsQuery.Where(p => p.Id == id.Value);
}
var infraProjects = await infraProjectsQuery.ToListAsync();
return infraProjects.Select(p => _mapper.Map<BasicProjectVM>(p)).ToList();
@ -108,6 +112,11 @@ namespace Marco.Pms.Services.Service
(!string.IsNullOrWhiteSpace(sp.ShortName) && sp.ShortName.ToLower().Contains(normalized)));
}
if (id.HasValue)
{
serviceProjectsQuery = serviceProjectsQuery.Where(sp => sp.Id == id.Value);
}
var serviceProjects = await serviceProjectsQuery.ToListAsync();
return serviceProjects.Select(sp => _mapper.Map<BasicProjectVM>(sp)).ToList();
});

View File

@ -8,7 +8,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
{
#region =================================================================== Get Functions ===================================================================
Task<ApiResponse<object>> GetOrganizarionListAsync(string? searchString, long? sprid, bool active, int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId, Guid loggedOrganizationId);
Task<ApiResponse<object>> GetOrganizationBasicListAsync(string? searchString, int pageNumber, int pageSize, Employee loggedInEmployee, CancellationToken ct);
Task<ApiResponse<object>> GetOrganizationBasicListAsync(Guid? id, string? searchString, int pageNumber, int pageSize, Employee loggedInEmployee, CancellationToken ct);
Task<ApiResponse<object>> GetOrganizationDetailsAsync(Guid id, Employee loggedInEmployee, Guid tenantId, Guid loggedOrganizationId);
Task<ApiResponse<object>> GetOrganizationHierarchyListAsync(Guid employeeId, Employee loggedInEmployee, Guid tenantId, Guid loggedOrganizationId);
#endregion

View File

@ -10,7 +10,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
{
public interface IProjectServices
{
Task<ApiResponse<object>> GetBothProjectBasicListAsync(string? searchString, Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> GetBothProjectBasicListAsync(Guid? id, string? searchString, Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> GetAllProjectsBasicAsync(bool provideAll, Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> GetAllProjectsAsync(string? searchString, int pageNumber, int pageSize, Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> GetProjectAsync(Guid id, Employee loggedInEmployee, Guid tenantId);