//3 database hits public async Task SaveCustomActionsAuditTrailAsync(string actionCode, string actionData, string userName) { try { AuditTrail auditTrail = new AuditTrail { Audit_ActionCode = actionCode, ActionData = actionData, UserName = userName }; await AuditUnitOfWork.AuditTrailRepository.AddAsync(auditTrail); await notificationService.SaveNotificationAsync(actionCode); await AuditUnitOfWork.SaveAsync(); } catch (Exception ex) { await ErrorLoger.Log(ex); } }
public async Task CheckNotificationsAndSend() { try { var notSentNotifications = await AuditUnitOfWork.NotificationRepository.GetAsync(a => a.Sent == false); if (notSentNotifications.Any()) { List <NotificationLog> notificationLogs = new List <NotificationLog>(); notSentNotifications.ForEach(async notification => { var result = await EmailService.SendAsync("", notification.ToEmails.Split(',').ToList(), "", notification.Message); if (result.Succeeded) { notification.Sent = result.Succeeded; AuditUnitOfWork.NotificationRepository.Update(notification); } NotificationLog notificationLog = new NotificationLog(); notificationLog.NotificationId = notification.Id; notificationLog.SendSucceeded = result.Succeeded; notificationLog.ErrorMessage = result.ErrorMessage; notificationLog.TryDate = DateTime.Now; notificationLogs.Add(notificationLog); }); await AuditUnitOfWork.NotificationLogRepository.AddAsync(notificationLogs); await AuditUnitOfWork.SaveAsync(); } } catch (Exception ex) { await ErrorLoger.Log(ex); } }
//4 database hits public async Task SaveDbActionsAuditTrailAsync(List <DatabaseChangesDto> databaseChanges) { try { List <AuditTrail> auditTrails = new List <AuditTrail>(); var updatedList = AuditUnitOfWork.AuditTrailRepository.AddToAuditTrailList(databaseChanges, DatabaseAuditActionsEnum.DatabaseUpdate.ToString(), EntityState.Modified, auditTrails); var addedList = AuditUnitOfWork.AuditTrailRepository.AddToAuditTrailList(databaseChanges, DatabaseAuditActionsEnum.DatabaseAdd.ToString(), EntityState.Added, auditTrails); var deletedList = AuditUnitOfWork.AuditTrailRepository.AddToAuditTrailList(databaseChanges, DatabaseAuditActionsEnum.DatabaseDelete.ToString(), EntityState.Deleted, auditTrails); await AuditUnitOfWork.AuditTrailRepository.AddAsync(auditTrails); await notificationService.SaveNotificationsAsync(DatabaseAuditActionsEnum.DatabaseUpdate.ToString(), updatedList); await notificationService.SaveNotificationsAsync(DatabaseAuditActionsEnum.DatabaseAdd.ToString(), addedList); await notificationService.SaveNotificationsAsync(DatabaseAuditActionsEnum.DatabaseDelete.ToString(), deletedList); await AuditUnitOfWork.SaveAsync(); } catch (Exception ex) { await ErrorLoger.Log(ex); } }