public async Task MarkAsRead(int notificationId) { var notification = await _context.Notifications .FirstOrDefaultAsync(n => n.Id == notificationId) .ConfigureAwait(false); notification.IsRead = true; _context.Update(notification); await _context.SaveChangesAsync() .ConfigureAwait(false); _logger.LogInformation($"notification {notificationId} marked as read"); }
public async Task SetRightsToProject(UpdateUserRightDTO update, int userId) { var project = await _context.Projects.FirstOrDefaultAsync(p => p.Id == update.ProjectId); if (project.AuthorId != userId) { _logger.LogWarning(LoggingEvents.HaveException, $"NonAuthorRightsChange"); throw new NonAuthorRightsChange(); } if (project.AuthorId == update.UserId) { _logger.LogWarning(LoggingEvents.HaveException, $"RightsChangeForProjectAuthorException"); throw new RightsChangeForProjectAuthorException(); } var projectMember = await _context.ProjectMembers .FirstOrDefaultAsync(pm => pm.UserId == update.UserId && pm.ProjectId == update.ProjectId); if (projectMember == null) { await _context.AddAsync(new ProjectMember() { ProjectId = update.ProjectId, UserId = update.UserId, UserAccess = update.Access } ); } else { projectMember.UserAccess = update.Access; _context.Update(projectMember); } await _context.SaveChangesAsync(); var opportunity = string.Empty; switch (update.Access) { case UserAccess.CanRead: opportunity = "can read"; break; case UserAccess.CanWrite: opportunity = "can write"; break; case UserAccess.CanBuild: opportunity = "can build"; break; case UserAccess.CanRun: opportunity = "can run"; break; default: opportunity = string.Empty; break; } var notification = new NotificationDTO() { Type = NotificationType.AssinedToProject, ProjectId = update.ProjectId, DateTime = DateTime.Now, Message = $"Now you can {opportunity} project \"{project.Name}\".", Status = NotificationStatus.Message }; using (var scope = _serviceScopeFactory.CreateScope()) { var notificationService = scope.ServiceProvider.GetService <INotificationService>(); await notificationService.SendNotificationToUserById(update.UserId, notification); } }