diff --git a/Marco.Pms.Helpers/CacheHelper/EmployeeCache.cs b/Marco.Pms.Helpers/CacheHelper/EmployeeCache.cs index a93eaf3..55d1675 100644 --- a/Marco.Pms.Helpers/CacheHelper/EmployeeCache.cs +++ b/Marco.Pms.Helpers/CacheHelper/EmployeeCache.cs @@ -212,6 +212,27 @@ namespace Marco.Pms.Helpers.CacheHelper return true; } + public async Task ClearAllEmployeesFromCacheByTenantId(Guid tenantId) + { + var tenantIdString = tenantId.ToString(); + + try + { + var filter = Builders.Filter.Eq(e => e.TenantId, tenantIdString); + + var result = await _collection.DeleteManyAsync(filter); + + if (result.DeletedCount == 0) + return false; + + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "Error occured while deleting employee profile"); + return false; + } + } public async Task ClearAllEmployeesFromCacheByEmployeeIds(List employeeIds, Guid tenantId) { var tenantIdString = tenantId.ToString(); diff --git a/Marco.Pms.Services/Controllers/TenantController.cs b/Marco.Pms.Services/Controllers/TenantController.cs index d20a049..d5c9d81 100644 --- a/Marco.Pms.Services/Controllers/TenantController.cs +++ b/Marco.Pms.Services/Controllers/TenantController.cs @@ -1013,10 +1013,6 @@ namespace Marco.Pms.Services.Controllers try { - _ = Task.Run(async () => - { - await ClearPermissionForTenant(); - }); var features = await _featureDetailsHelper.GetFeatureDetails(subscriptionPlan.FeaturesId); if (features == null) { @@ -1325,10 +1321,6 @@ namespace Marco.Pms.Services.Controllers _logger.LogInfo("Subscription plan changed: Tenant={TenantId}, NewPlan={PlanId}", model.TenantId, model.PlanId); - _ = Task.Run(async () => - { - await ClearPermissionForTenant(); - }); // 8. Update tenant permissions based on subscription features. var features = await _featureDetailsHelper.GetFeatureDetails(subscriptionPlan.FeaturesId); @@ -1374,7 +1366,8 @@ namespace Marco.Pms.Services.Controllers var rootRoleId = await context.EmployeeRoleMappings .AsNoTracking() - .Where(er => er.EmployeeId == rootEmployee.Id && er.TenantId == model.TenantId) + .Include(er => er.Role) + .Where(er => er.EmployeeId == rootEmployee.Id && er.TenantId == model.TenantId && er.Role != null && er.Role.Role == "Super User") .Select(er => er.RoleId) .FirstOrDefaultAsync(); @@ -1439,6 +1432,9 @@ namespace Marco.Pms.Services.Controllers _logger.LogInfo("Permissions revoked: {Count} for Role={RoleId}", mappingsToRemove.Count, rootRoleId); } + var _cache = scope.ServiceProvider.GetRequiredService(); + await _cache.ClearAllEmployeesFromCacheByTenantId(tenant.Id); + var _masteData = scope.ServiceProvider.GetRequiredService(); if (features.Modules?.ProjectManagement?.Enabled ?? false) @@ -1823,19 +1819,6 @@ namespace Marco.Pms.Services.Controllers return ApiResponse.SuccessResponse(VM, "Success", 200); } - private async Task ClearPermissionForTenant() - { - await using var _context = await _dbContextFactory.CreateDbContextAsync(); - using var scope = _serviceScopeFactory.CreateScope(); - - var _cache = scope.ServiceProvider.GetRequiredService(); - var _cacheLogger = scope.ServiceProvider.GetRequiredService(); - - var employeeIds = await _context.Employees.Where(e => e.TenantId == tenantId).Select(e => e.Id).ToListAsync(); - await _cache.ClearAllEmployeesFromCacheByEmployeeIds(employeeIds, tenantId); - _cacheLogger.LogInfo("{EmployeeCount} number of employee deleted", employeeIds.Count); - } - #endregion } } diff --git a/Marco.Pms.Services/Helpers/CacheUpdateHelper.cs b/Marco.Pms.Services/Helpers/CacheUpdateHelper.cs index fd56f41..4bea62e 100644 --- a/Marco.Pms.Services/Helpers/CacheUpdateHelper.cs +++ b/Marco.Pms.Services/Helpers/CacheUpdateHelper.cs @@ -956,6 +956,17 @@ namespace Marco.Pms.Services.Helpers _logger.LogError(ex, "Error occured while deleting all employees from Cache"); } } + public async Task ClearAllEmployeesFromCacheByTenantId(Guid tenantId) + { + try + { + var response = await _employeeCache.ClearAllEmployeesFromCacheByTenantId(tenantId); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error occured while deleting all employees from Cache"); + } + } public async Task ClearAllEmployees() { try