From c3670eaab96bfe47625687a7cb55c08459506532 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Mon, 29 Sep 2025 14:48:42 +0530 Subject: [PATCH] Added Primary organization of tenant in get organization list --- .../Controllers/OrganizationController.cs | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Marco.Pms.Services/Controllers/OrganizationController.cs b/Marco.Pms.Services/Controllers/OrganizationController.cs index 47d3030..04e5d1a 100644 --- a/Marco.Pms.Services/Controllers/OrganizationController.cs +++ b/Marco.Pms.Services/Controllers/OrganizationController.cs @@ -74,10 +74,36 @@ namespace Marco.Pms.Services.Controllers else { // Get organization IDs mapped to current tenant that are active - var organizationIds = await _context.TenantOrgMappings + var organizationIdsTask = Task.Run(async () => + { + await using var context = await _dbContextFactory.CreateDbContextAsync(); + return await context.TenantOrgMappings .Where(to => to.TenantId == tenantId && to.IsActive) .Select(to => to.OrganizationId) .ToListAsync(); + }); + + var tenantTask = Task.Run(async () => + { + await using var context = await _dbContextFactory.CreateDbContextAsync(); + return await context.Tenants + .FirstOrDefaultAsync(t => t.Id == tenantId && t.IsActive); + }); + + await Task.WhenAll(organizationIdsTask, tenantTask); + + var organizationIds = organizationIdsTask.Result; + var tenant = tenantTask.Result; + + if (tenant == null) + { + _logger.LogWarning("Tenant {TenantId} is not found", tenantId); + return NotFound(ApiResponse.ErrorResponse("Tenant not found", "Tenant not found in database", 404)); + } + + organizationIds.Add(tenant.OrganizationId); + + organizationIds = organizationIds.Distinct().ToList(); organizationQuery = organizationQuery.Where(o => organizationIds.Contains(o.Id)); _logger.LogDebug("Filtering organizations by tenant's mapped IDs count: {Count}", organizationIds.Count); @@ -101,6 +127,14 @@ namespace Marco.Pms.Services.Controllers .Take(pageSize) .ToListAsync(); + if (organizations.Any()) + { + organizations = await _context.Tenants.AsNoTracking() + .Include(t => t.Organization) + .Where(t => t.Id == tenantId && t.OrganizationId == loggedInEmployee.OrganizationId && t.Organization != null && t.IsActive) + .Select(t => t.Organization!).ToListAsync(); + } + // Collect creator and updater employee IDs var createdByIds = organizations.Where(o => o.CreatedById != null).Select(o => o.CreatedById!.Value).Distinct().ToList(); var updatedByIds = organizations.Where(o => o.UpdatedById != null).Select(o => o.UpdatedById!.Value).Distinct().ToList();