When sending the report before data has been taken from cache not from database change it to both

This commit is contained in:
ashutosh.nehete 2025-07-18 16:03:53 +05:30
parent 7b2a3887de
commit 328c6ec4e3
4 changed files with 37 additions and 89 deletions

View File

@ -110,6 +110,19 @@ namespace Marco.Pms.CacheHelper
return project; return project;
} }
public async Task<ProjectMongoDB?> GetProjectDetailsWithBuildingsFromCache(Guid projectId)
{
// Build filter and projection to exclude large 'Buildings' list
var filter = Builders<ProjectMongoDB>.Filter.Eq(p => p.Id, projectId.ToString());
// Perform query
var project = await _projectCollection
.Find(filter)
.FirstOrDefaultAsync();
return project;
}
public async Task<List<ProjectMongoDB>> GetProjectDetailsListFromCache(List<Guid> projectIds) public async Task<List<ProjectMongoDB>> GetProjectDetailsListFromCache(List<Guid> projectIds)
{ {
List<string> stringProjectIds = projectIds.Select(p => p.ToString()).ToList(); List<string> stringProjectIds = projectIds.Select(p => p.ToString()).ToList();

View File

@ -370,84 +370,6 @@ namespace Marco.Pms.Services.Controllers
200)); 200));
} }
//[HttpPost("add-report-mail1")]
//public async Task<IActionResult> StoreProjectStatistics1()
//{
// Guid tenantId = _userHelper.GetTenantId();
// // Use AsNoTracking() for read-only queries to improve performance
// List<MailDetails> mailDetails = await _context.MailDetails
// .AsNoTracking()
// .Include(m => m.MailBody)
// .Where(m => m.TenantId == tenantId)
// .ToListAsync();
// var groupedMails = mailDetails
// .GroupBy(m => new { m.ProjectId, m.MailListId })
// .Select(g => new
// {
// ProjectId = g.Key.ProjectId,
// MailListId = g.Key.MailListId,
// Recipients = g.Select(m => m.Recipient).Distinct().ToList(),
// MailBody = g.FirstOrDefault()?.MailBody?.Body ?? "",
// Subject = g.FirstOrDefault()?.MailBody?.Subject ?? string.Empty,
// })
// .ToList();
// foreach (var groupMail in groupedMails)
// {
// var projectId = groupMail.ProjectId;
// var body = groupMail.MailBody;
// var subject = groupMail.Subject;
// var receivers = groupMail.Recipients;
// if (projectId == Guid.Empty)
// {
// _logger.LogError("Provided empty project ID while fetching project report.");
// return NotFound(ApiResponse<object>.ErrorResponse("Provided empty Project ID.", "Provided empty Project ID.", 400));
// }
// var statisticReport = await _reportHelper.GetDailyProjectReport(projectId, tenantId);
// if (statisticReport == null)
// {
// _logger.LogWarning("User attempted to fetch project progress for project ID {ProjectId} but not found.", projectId);
// return NotFound(ApiResponse<object>.ErrorResponse("Project not found.", "Project not found.", 404));
// }
// var date = statisticReport.Date.ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture);
// // Send Email
// var emailBody = await _emailSender.SendProjectStatisticsEmail(new List<string>(), body, subject, statisticReport);
// var subjectReplacements = new Dictionary<string, string>
// {
// {"DATE", date },
// {"PROJECT_NAME", statisticReport.ProjectName}
// };
// foreach (var item in subjectReplacements)
// {
// subject = subject.Replace($"{{{{{item.Key}}}}}", item.Value);
// }
// string env = _configuration["environment:Title"] ?? string.Empty;
// if (string.IsNullOrWhiteSpace(env))
// {
// subject = $"{subject}";
// }
// else
// {
// subject = $"({env}) {subject}";
// }
// var mail = new ProjectReportEmailMongoDB
// {
// IsSent = false,
// Body = emailBody,
// Receivers = receivers,
// Subject = subject,
// };
// await _cache.AddProjectReportMail(mail);
// }
// return Ok(ApiResponse<object>.SuccessResponse("Project Report Mail is stored in MongoDB", "Project Report Mail is stored in MongoDB", 200));
//}
[HttpPost("add-report-mail")] [HttpPost("add-report-mail")]
public async Task<IActionResult> StoreProjectStatistics() public async Task<IActionResult> StoreProjectStatistics()
{ {

View File

@ -200,7 +200,7 @@ namespace Marco.Pms.Services.Helpers
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogWarning("Error occurred while adding project {ProjectId} to Cache: {Error}", project.Id, ex.Message); _logger.LogError(ex, "Error occurred while adding project {ProjectId} to Cache", project.Id);
} }
} }
public async Task AddProjectDetailsList(List<Project> projects) public async Task AddProjectDetailsList(List<Project> projects)
@ -415,7 +415,7 @@ namespace Marco.Pms.Services.Helpers
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogWarning("Error occurred while adding project list to Cache: {Error}", ex.Message); _logger.LogError(ex, "Error occurred while adding project list to Cache");
} }
} }
public async Task<bool> UpdateProjectDetailsOnly(Project project) public async Task<bool> UpdateProjectDetailsOnly(Project project)
@ -429,7 +429,7 @@ namespace Marco.Pms.Services.Helpers
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogWarning("Error occured while updating project {ProjectId} to Cache: {Error}", project.Id, ex.Message); _logger.LogError(ex, "Error occured while updating project {ProjectId} to Cache", project.Id);
return false; return false;
} }
} }
@ -442,7 +442,20 @@ namespace Marco.Pms.Services.Helpers
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogWarning("Error occured while getting project {ProjectId} to Cache: {Error}", ex.Message); _logger.LogError(ex, "Error occured while getting project {ProjectId} to Cache");
return null;
}
}
public async Task<ProjectMongoDB?> GetProjectDetailsWithBuildings(Guid projectId)
{
try
{
var response = await _projectCache.GetProjectDetailsWithBuildingsFromCache(projectId);
return response;
}
catch (Exception ex)
{
_logger.LogError(ex, "Error occured while getting project {ProjectId} to Cache");
return null; return null;
} }
} }
@ -462,7 +475,7 @@ namespace Marco.Pms.Services.Helpers
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogWarning("Error occured while getting list of project details from to Cache: {Error}", ex.Message); _logger.LogError(ex, "Error occured while getting list of project details from to Cache");
return null; return null;
} }
} }
@ -474,7 +487,7 @@ namespace Marco.Pms.Services.Helpers
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogWarning("Error occured while deleting project from to Cache: {Error}", ex.Message); _logger.LogError(ex, "Error occured while deleting project from to Cache");
} }
} }

View File

@ -28,7 +28,7 @@ namespace Marco.Pms.Services.Helpers
{ {
// await _cache.GetBuildingAndFloorByWorkAreaId(); // await _cache.GetBuildingAndFloorByWorkAreaId();
DateTime reportDate = DateTime.UtcNow.AddDays(-1).Date; DateTime reportDate = DateTime.UtcNow.AddDays(-1).Date;
var project = await _cache.GetProjectDetails(projectId); var project = await _cache.GetProjectDetailsWithBuildings(projectId);
if (project == null) if (project == null)
{ {
var projectSQL = await _context.Projects var projectSQL = await _context.Projects
@ -91,7 +91,7 @@ namespace Marco.Pms.Services.Helpers
BuildingName = b.BuildingName, BuildingName = b.BuildingName,
Description = b.Description Description = b.Description
}).ToList(); }).ToList();
if (buildings == null) if (!buildings.Any())
{ {
buildings = await _context.Buildings buildings = await _context.Buildings
.Where(b => b.ProjectId == projectId) .Where(b => b.ProjectId == projectId)
@ -113,7 +113,7 @@ namespace Marco.Pms.Services.Helpers
BuildingId = f.BuildingId, BuildingId = f.BuildingId,
FloorName = f.FloorName FloorName = f.FloorName
})).ToList(); })).ToList();
if (floors == null) if (!floors.Any())
{ {
var buildingIds = buildings.Select(b => Guid.Parse(b.Id)).ToList(); var buildingIds = buildings.Select(b => Guid.Parse(b.Id)).ToList();
floors = await _context.Floor floors = await _context.Floor
@ -131,7 +131,7 @@ namespace Marco.Pms.Services.Helpers
areas = project.Buildings areas = project.Buildings
.SelectMany(b => b.Floors) .SelectMany(b => b.Floors)
.SelectMany(f => f.WorkAreas).ToList(); .SelectMany(f => f.WorkAreas).ToList();
if (areas == null) if (!areas.Any())
{ {
var floorIds = floors.Select(f => Guid.Parse(f.Id)).ToList(); var floorIds = floors.Select(f => Guid.Parse(f.Id)).ToList();
areas = await _context.WorkAreas areas = await _context.WorkAreas
@ -149,7 +149,7 @@ namespace Marco.Pms.Services.Helpers
// fetch Work Items // fetch Work Items
workItems = await _cache.GetWorkItemsByWorkAreaIds(areaIds); workItems = await _cache.GetWorkItemsByWorkAreaIds(areaIds);
if (workItems == null) if (workItems == null || !workItems.Any())
{ {
workItems = await _context.WorkItems workItems = await _context.WorkItems
.Include(w => w.ActivityMaster) .Include(w => w.ActivityMaster)