Added the projectID and employeeID in document modification notification

This commit is contained in:
ashutosh.nehete 2025-09-15 18:04:44 +05:30
parent 0b150fed9a
commit 892facef40

View File

@ -1775,12 +1775,24 @@ namespace Marco.Pms.Services.Service
await using var _context = await _dbContextFactory.CreateDbContextAsync(); await using var _context = await _dbContextFactory.CreateDbContextAsync();
using var scope = _serviceScopeFactory.CreateScope(); using var scope = _serviceScopeFactory.CreateScope();
var roleIds = await _context.RolePermissionMappings
.Where(rp => rp.FeaturePermissionId == PermissionsMaster.ViewDocument)
.Select(rp => rp.ApplicationRoleId).ToListAsync();
var employeeIds = await _context.EmployeeRoleMappings
.Where(er =>
roleIds.Contains(er.RoleId))
.Select(er => er.EmployeeId)
.ToListAsync();
employeeIds.Add(employeeId);
var data = new Dictionary<string, string>() var data = new Dictionary<string, string>()
{ {
{ "Keyword", "Employee_Document_Modified" } { "Keyword", "Employee_Document_Modified" },
{ "EmployeeId", employeeId.ToString() }
}; };
var registrationTokensForNotification = await _context.FCMTokenMappings.Where(ft => ft.EmployeeId == employeeId && ft.ExpiredAt >= DateTime.UtcNow).Select(ft => ft.FcmToken).ToListAsync(); var registrationTokensForNotification = await _context.FCMTokenMappings.Where(ft => employeeIds.Contains(ft.EmployeeId) && ft.ExpiredAt >= DateTime.UtcNow).Select(ft => ft.FcmToken).ToListAsync();
await SendMessageToMultipleDevicesWithDataAsync(registrationTokensForNotification, notification, data); await SendMessageToMultipleDevicesWithDataAsync(registrationTokensForNotification, notification, data);
} }
@ -1820,20 +1832,32 @@ namespace Marco.Pms.Services.Service
.ToListAsync(); .ToListAsync();
return employeeIds; return employeeIds;
}); });
var viewDocumentForProjectEmployeeIdsTask = Task.Run(async () =>
{
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
var employeeIds = await dbContext.ProjectLevelPermissionMappings
.Where(pl => pl.ProjectId == projectId && pl.PermissionId == PermissionsMaster.ViewDocument)
.Select(pl => pl.EmployeeId)
.ToListAsync();
return employeeIds;
});
await Task.WhenAll(assignedEmployeeIdsTask, manageProjectEmployeeIdsTask, viewDocumentEmployeeIdsTask); await Task.WhenAll(assignedEmployeeIdsTask, manageProjectEmployeeIdsTask, viewDocumentEmployeeIdsTask, viewDocumentForProjectEmployeeIdsTask);
var assignedEmployeeIds = assignedEmployeeIdsTask.Result; var assignedEmployeeIds = assignedEmployeeIdsTask.Result;
var manageProjectEmployeeIds = manageProjectEmployeeIdsTask.Result; var manageProjectEmployeeIds = manageProjectEmployeeIdsTask.Result;
var viewDocumentEmployeeIds = viewDocumentEmployeeIdsTask.Result; var viewDocumentEmployeeIds = viewDocumentEmployeeIdsTask.Result;
var viewDocumentForProjectEmployeeIds = viewDocumentForProjectEmployeeIdsTask.Result;
assignedEmployeeIds.AddRange(manageProjectEmployeeIds); assignedEmployeeIds.AddRange(manageProjectEmployeeIds);
assignedEmployeeIds.AddRange(viewDocumentForProjectEmployeeIds);
var finalEmployeeIds = assignedEmployeeIds.Intersect(viewDocumentEmployeeIds).ToList(); var finalEmployeeIds = assignedEmployeeIds.Intersect(viewDocumentEmployeeIds).ToList();
var data = new Dictionary<string, string>() var data = new Dictionary<string, string>()
{ {
{ "Keyword", "Project_Document_Modified" } { "Keyword", "Project_Document_Modified" },
{ "ProjectId", projectId.ToString() }
}; };
var registrationTokensForNotification = await _context.FCMTokenMappings.Where(ft => finalEmployeeIds.Contains(ft.EmployeeId) && ft.ExpiredAt >= DateTime.UtcNow).Select(ft => ft.FcmToken).ToListAsync(); var registrationTokensForNotification = await _context.FCMTokenMappings.Where(ft => finalEmployeeIds.Contains(ft.EmployeeId) && ft.ExpiredAt >= DateTime.UtcNow).Select(ft => ft.FcmToken).ToListAsync();