using Marco.Pms.CacheHelper; using Marco.Pms.Model.MongoDBModels; using Marco.Pms.Model.Projects; using MarcoBMS.Services.Service; using Project = Marco.Pms.Model.Projects.Project; namespace Marco.Pms.Services.Helpers { public class CacheUpdateHelper { private readonly ProjectCache _projectCache; private readonly EmployeeCache _employeeCache; private readonly ILoggingService _logger; public CacheUpdateHelper(ProjectCache projectCache, EmployeeCache employeeCache, ILoggingService logger) { _projectCache = projectCache; _employeeCache = employeeCache; _logger = logger; } // ------------------------------------ Project Details and Infrastructure Cache --------------------------------------- public async Task AddProjectDetails(Project project) { try { await _projectCache.AddProjectDetailsToCache(project); } catch (Exception ex) { _logger.LogWarning("Error occured while adding project {ProjectId} to Cache : {Error}", project.Id, ex.Message); } } public async Task UpdateProjectDetailsOnly(Project project) { try { bool response = await _projectCache.UpdateProjectDetailsOnlyToCache(project); return response; } catch (Exception ex) { _logger.LogWarning("Error occured while updating project {ProjectId} to Cache: {Error}", project.Id, ex.Message); return false; } } public async Task GetProjectDetails(Guid projectId) { try { var response = await _projectCache.GetProjectDetailsFromCache(projectId); return response; } catch (Exception ex) { _logger.LogWarning("Error occured while getting project {ProjectId} to Cache: {Error}", ex.Message); return null; } } public async Task?> GetProjectDetailsList(List projectIds) { try { var response = await _projectCache.GetProjectDetailsListFromCache(projectIds); return response; } catch (Exception ex) { _logger.LogWarning("Error occured while getting list od project details from to Cache: {Error}", ex.Message); return null; } } public async Task AddBuildngInfra(Guid projectId, Building? building = null, Floor? floor = null, WorkArea? workArea = null, Guid? buildingId = null) { try { await _projectCache.AddBuildngInfraToCache(projectId, building, floor, workArea, buildingId); } catch (Exception ex) { _logger.LogWarning("Error occured while adding project infra for project {ProjectId} to Cache: {Error}", projectId, ex.Message); } } public async Task UpdateBuildngInfra(Guid projectId, Building? building = null, Floor? floor = null, WorkArea? workArea = null, Guid? buildingId = null) { try { var response = await _projectCache.UpdateBuildngInfraToCache(projectId, building, floor, workArea, buildingId); if (!response) { await _projectCache.AddBuildngInfraToCache(projectId, building, floor, workArea, buildingId); } } catch (Exception ex) { _logger.LogWarning("Error occured while updating project infra for project {ProjectId} to Cache: {Error}", projectId, ex.Message); } } public async Task?> GetBuildingInfra(Guid projectId) { try { var response = await _projectCache.GetBuildingInfraFromCache(projectId); return response; } catch (Exception ex) { _logger.LogWarning("Error occured while getting project infra for project {ProjectId} form Cache: {Error}", projectId, ex.Message); return null; } } // ------------------------------------ Employee Profile Cache --------------------------------------- public async Task AddApplicationRole(Guid employeeId, List roleIds) { try { var response = await _employeeCache.AddApplicationRoleToCache(employeeId, roleIds); } catch (Exception ex) { _logger.LogWarning("Error occured while adding Application roleIds to Cache to employee {Employee}: {Error}", employeeId, ex.Message); } } public async Task AddProjects(Guid employeeId, List projectIds) { try { var response = await _employeeCache.AddProjectsToCache(employeeId, projectIds); return response; } catch (Exception ex) { _logger.LogWarning("Error occured while adding projectIds for employee {EmployeeId} to Cache: {Error}", employeeId, ex.Message); return false; } } public async Task?> GetProjects(Guid employeeId) { try { var response = await _employeeCache.GetProjectsFromCache(employeeId); if (response.Count > 0) { return response; } return null; } catch (Exception ex) { _logger.LogWarning("Error occured while getting projectIds for employee {EmployeeId} from Cache: {Error}", employeeId, ex.Message); return null; } } public async Task?> GetPermissions(Guid employeeId) { try { var response = await _employeeCache.GetPermissionsFromCache(employeeId); if (response.Count > 0) { return response; } return null; } catch (Exception ex) { _logger.LogWarning("Error occured while getting permissionIds for employee {EmployeeId} from Cache: {Error}", employeeId, ex.Message); return null; } } public async Task ClearAllProjectIds(Guid employeeId) { try { var response = await _employeeCache.ClearAllProjectIdsFromCache(employeeId); } catch (Exception ex) { _logger.LogWarning("Error occured while deleting projectIds from Cache for employee {EmployeeId}: {Error}", employeeId, ex.Message); } } public async Task ClearAllProjectIdsByRoleId(Guid roleId) { try { await _employeeCache.ClearAllProjectIdsByRoleIdFromCache(roleId); } catch (Exception ex) { _logger.LogWarning("Error occured while deleting projectIds from Cache for Application Role {RoleId}: {Error}", roleId, ex.Message); } } public async Task ClearAllPermissionIdsByEmployeeID(Guid employeeId) { try { var response = await _employeeCache.ClearAllPermissionIdsByEmployeeIDFromCache(employeeId); } catch (Exception ex) { _logger.LogWarning("Error occured while deleting permissionIds from Cache for employee {EmployeeId}: {Error}", employeeId, ex.Message); } } public async Task ClearAllPermissionIdsByRoleId(Guid roleId) { try { var response = await _employeeCache.ClearAllPermissionIdsByRoleIdFromCache(roleId); } catch (Exception ex) { _logger.LogWarning("Error occured while deleting permissionIds from Cache for Application role {RoleId}: {Error}", roleId, ex.Message); } } public async Task RemoveRoleId(Guid employeeId, Guid roleId) { try { var response = await _employeeCache.RemoveRoleIdFromCache(employeeId, roleId); } catch (Exception ex) { _logger.LogWarning("Error occured while deleting Application role {RoleId} from Cache for employee {EmployeeId}: {Error}", roleId, employeeId, ex.Message); } } } }