diff --git a/Marco.Pms.Services/Controllers/AuthController.cs b/Marco.Pms.Services/Controllers/AuthController.cs index a0daa9d..efe81ac 100644 --- a/Marco.Pms.Services/Controllers/AuthController.cs +++ b/Marco.Pms.Services/Controllers/AuthController.cs @@ -1360,10 +1360,28 @@ namespace MarcoBMS.Services.Controllers } // Find TenantOrgMapping for given tenantId and organizationId to validate access - var tenantOrganization = await _context.TenantOrgMappings + var tenantOrganizationTask = Task.Run(async () => + { + await using var context = await _dbContextFactory.CreateDbContextAsync(); + return await context.TenantOrgMappings .FirstOrDefaultAsync(to => to.TenantId == tenantId && to.OrganizationId == organizationId); - if (tenantOrganization == null) + }); + + var primaryOrganizationTask = Task.Run(async () => + { + await using var context = await _dbContextFactory.CreateDbContextAsync(); + return await context.Tenants + .Where(t => t.Id == tenantId && t.OrganizationId == organizationId).ToListAsync(); + + }); + + await Task.WhenAll(tenantOrganizationTask, primaryOrganizationTask); + + var tenantOrganization = tenantOrganizationTask.Result; + var primaryOrganization = primaryOrganizationTask.Result; + + if (tenantOrganization == null && !primaryOrganization.Any()) { _logger.LogWarning("Tenant Organization Mapping not found for TenantId: {TenantId} and OrganizationId: {OrganizationId}", tenantId, organizationId); return NotFound(ApiResponse.ErrorResponse("Tenant Organization Mapping not found", "Tenant Organization Mapping not found in database", 404)); @@ -1378,10 +1396,10 @@ namespace MarcoBMS.Services.Controllers } // Generate JWT token scoped to selected tenant and logged-in employee - var token = _refreshTokenService.GenerateJwtToken(loggedInEmployee.Email, tenantOrganization.TenantId, loggedInEmployee.OrganizationId, _jwtSettings); + var token = _refreshTokenService.GenerateJwtToken(loggedInEmployee.Email, tenantId, loggedInEmployee.OrganizationId, _jwtSettings); // Generate and store refresh token - var refreshToken = await _refreshTokenService.CreateRefreshToken(loggedInEmployee.ApplicationUserId, tenantOrganization.TenantId.ToString(), loggedInEmployee.OrganizationId, _jwtSettings); + var refreshToken = await _refreshTokenService.CreateRefreshToken(loggedInEmployee.ApplicationUserId, tenantId.ToString(), loggedInEmployee.OrganizationId, _jwtSettings); _logger.LogInfo("Tenant selected and tokens generated for TenantId: {TenantId} and Employee: {EmployeeEmail}", tenantId, loggedInEmployee.Email ?? string.Empty);