Firebase_Implementation #135

Merged
ashutosh.nehete merged 62 commits from Firebase_Implementation into main 2025-09-20 12:11:54 +00:00
Showing only changes of commit 673102cb50 - Show all commits

View File

@ -57,58 +57,84 @@ namespace Marco.Pms.Services.Service
}).FirstOrDefaultAsync(); }).FirstOrDefaultAsync();
}); });
var roleTask = Task.Run(async () => var teamAttendanceRoleTask = Task.Run(async () =>
{ {
await using var dbContext = await _dbContextFactory.CreateDbContextAsync(); await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
return await dbContext.RolePermissionMappings return await dbContext.RolePermissionMappings
.Where(rp => rp.FeaturePermissionId == PermissionsMaster.TeamAttendance) .Where(rp => rp.FeaturePermissionId == PermissionsMaster.TeamAttendance)
.Select(rp => rp.ApplicationRoleId).ToListAsync(); .Select(rp => rp.ApplicationRoleId).ToListAsync();
}); });
var manageProjectsRoleTask = Task.Run(async () =>
{
await using var dbContext = await _dbContextFactory.CreateDbContextAsync();
return await dbContext.RolePermissionMappings
.Where(rp => rp.FeaturePermissionId == PermissionsMaster.ManageProject)
.Select(rp => rp.ApplicationRoleId).ToListAsync();
});
await Task.WhenAll(projectTask, roleTask); await Task.WhenAll(projectTask, teamAttendanceRoleTask, manageProjectsRoleTask);
var applicationRoleIds = roleTask.Result; var teamAttendanceRoleIds = teamAttendanceRoleTask.Result;
var manageProjectsRoleIds = manageProjectsRoleTask.Result;
var project = projectTask.Result; var project = projectTask.Result;
List<Guid> projectAssignedEmployeeIds = project?.EmployeeIds ?? new List<Guid>(); List<Guid> projectAssignedEmployeeIds = project?.EmployeeIds ?? new List<Guid>();
var employeeIds = await _context.EmployeeRoleMappings var employeeIds = await _context.EmployeeRoleMappings
.Where(er => projectAssignedEmployeeIds.Contains(er.EmployeeId) && applicationRoleIds.Contains(er.RoleId)) .Where(er => (projectAssignedEmployeeIds.Contains(er.EmployeeId) || manageProjectsRoleIds.Contains(er.RoleId)) && teamAttendanceRoleIds.Contains(er.RoleId))
.Select(er => er.RoleId) .Select(er => er.RoleId)
.ToListAsync(); .ToListAsync();
string body; Notification notificationFirebase;
switch (markType) switch (markType)
{ {
case ATTENDANCE_MARK_TYPE.CHECK_IN: case ATTENDANCE_MARK_TYPE.CHECK_IN:
body = $"{Name} Checked In for project {project?.ProjectName ?? ""}"; notificationFirebase = new Notification
{
Title = "Attendance Update",
Body = $" {Name} has checked in for project {project?.ProjectName ?? ""}."
};
break; break;
case ATTENDANCE_MARK_TYPE.CHECK_OUT: case ATTENDANCE_MARK_TYPE.CHECK_OUT:
body = $"{Name} Checked Out for project {project?.ProjectName ?? ""}"; notificationFirebase = new Notification
{
Title = "Attendance Update",
Body = $" {Name} has checked out for project {project?.ProjectName ?? ""}."
};
break; break;
case ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE: case ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE:
body = $"{Name} Requested Regularization for project {project?.ProjectName ?? ""}"; notificationFirebase = new Notification
{
Title = "Regularization Request",
Body = $" {Name} has submitted a regularization request for project {project?.ProjectName ?? ""}."
};
break; break;
case ATTENDANCE_MARK_TYPE.REGULARIZE: case ATTENDANCE_MARK_TYPE.REGULARIZE:
body = $"Regularization Accepted of {Name} for Project {project?.ProjectName ?? ""}"; notificationFirebase = new Notification
{
Title = " Regularization Approved",
Body = $" {Name}'s regularization request for project {project?.ProjectName ?? ""} has been accepted."
};
break; break;
case ATTENDANCE_MARK_TYPE.REGULARIZE_REJECT: case ATTENDANCE_MARK_TYPE.REGULARIZE_REJECT:
body = $"Regularization Rejected of {Name} for Project {project?.ProjectName ?? ""}"; notificationFirebase = new Notification
{
Title = "Regularization Denied",
Body = $" {Name}'s regularization request for project {project?.ProjectName ?? ""} has been rejected."
};
break; break;
default: default:
body = string.Empty; notificationFirebase = new Notification
{
Title = "Attendance Update",
Body = $" {Name} has update his/her attendance for project {project?.ProjectName ?? ""}."
};
break; break;
} }
var notificationFirebase = new Notification
{
Title = "Attendance Marked",
Body = body
};
// List of device registration tokens to send the message to // List of device registration tokens to send the message to
var registrationTokens = await _context.FCMTokenMappings var registrationTokens = await _context.FCMTokenMappings
//.Where(ft => employeeIds.Contains(ft.EmployeeId) && ft.TenantId == tenantId) .Where(ft => employeeIds.Contains(ft.EmployeeId) && ft.TenantId == tenantId)
.Select(ft => ft.FcmToken).ToListAsync(); .Select(ft => ft.FcmToken).ToListAsync();
await SendMessageToMultipleDevicesAsync(registrationTokens, notificationFirebase); await SendMessageToMultipleDevicesAsync(registrationTokens, notificationFirebase);