Removing all employees profile from cache for certain tenant
This commit is contained in:
parent
a809bdd469
commit
53da15416a
@ -212,6 +212,27 @@ namespace Marco.Pms.Helpers.CacheHelper
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
public async Task<bool> ClearAllEmployeesFromCacheByTenantId(Guid tenantId)
|
||||||
|
{
|
||||||
|
var tenantIdString = tenantId.ToString();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var filter = Builders<EmployeePermissionMongoDB>.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<bool> ClearAllEmployeesFromCacheByEmployeeIds(List<string> employeeIds, Guid tenantId)
|
public async Task<bool> ClearAllEmployeesFromCacheByEmployeeIds(List<string> employeeIds, Guid tenantId)
|
||||||
{
|
{
|
||||||
var tenantIdString = tenantId.ToString();
|
var tenantIdString = tenantId.ToString();
|
||||||
|
@ -1013,10 +1013,6 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_ = Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await ClearPermissionForTenant();
|
|
||||||
});
|
|
||||||
var features = await _featureDetailsHelper.GetFeatureDetails(subscriptionPlan.FeaturesId);
|
var features = await _featureDetailsHelper.GetFeatureDetails(subscriptionPlan.FeaturesId);
|
||||||
if (features == null)
|
if (features == null)
|
||||||
{
|
{
|
||||||
@ -1325,10 +1321,6 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
_logger.LogInfo("Subscription plan changed: Tenant={TenantId}, NewPlan={PlanId}",
|
_logger.LogInfo("Subscription plan changed: Tenant={TenantId}, NewPlan={PlanId}",
|
||||||
model.TenantId, model.PlanId);
|
model.TenantId, model.PlanId);
|
||||||
|
|
||||||
_ = Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await ClearPermissionForTenant();
|
|
||||||
});
|
|
||||||
|
|
||||||
// 8. Update tenant permissions based on subscription features.
|
// 8. Update tenant permissions based on subscription features.
|
||||||
var features = await _featureDetailsHelper.GetFeatureDetails(subscriptionPlan.FeaturesId);
|
var features = await _featureDetailsHelper.GetFeatureDetails(subscriptionPlan.FeaturesId);
|
||||||
@ -1374,7 +1366,8 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
|
|
||||||
var rootRoleId = await context.EmployeeRoleMappings
|
var rootRoleId = await context.EmployeeRoleMappings
|
||||||
.AsNoTracking()
|
.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)
|
.Select(er => er.RoleId)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
|
|
||||||
@ -1439,6 +1432,9 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
_logger.LogInfo("Permissions revoked: {Count} for Role={RoleId}", mappingsToRemove.Count, rootRoleId);
|
_logger.LogInfo("Permissions revoked: {Count} for Role={RoleId}", mappingsToRemove.Count, rootRoleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _cache = scope.ServiceProvider.GetRequiredService<CacheUpdateHelper>();
|
||||||
|
await _cache.ClearAllEmployeesFromCacheByTenantId(tenant.Id);
|
||||||
|
|
||||||
var _masteData = scope.ServiceProvider.GetRequiredService<MasterDataService>();
|
var _masteData = scope.ServiceProvider.GetRequiredService<MasterDataService>();
|
||||||
|
|
||||||
if (features.Modules?.ProjectManagement?.Enabled ?? false)
|
if (features.Modules?.ProjectManagement?.Enabled ?? false)
|
||||||
@ -1823,19 +1819,6 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
return ApiResponse<SubscriptionPlanVM>.SuccessResponse(VM, "Success", 200);
|
return ApiResponse<SubscriptionPlanVM>.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<CacheUpdateHelper>();
|
|
||||||
var _cacheLogger = scope.ServiceProvider.GetRequiredService<ILoggingService>();
|
|
||||||
|
|
||||||
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
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -956,6 +956,17 @@ namespace Marco.Pms.Services.Helpers
|
|||||||
_logger.LogError(ex, "Error occured while deleting all employees from Cache");
|
_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()
|
public async Task ClearAllEmployees()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
Loading…
x
Reference in New Issue
Block a user