|
|
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.Logging;
namespace CDP { public class MailProcessor { private readonly ILogger<MailProcessor> _logger;
public MailProcessor(ILogger<MailProcessor> logger) { _logger = logger; }
public static async Task ProcessMailEvent(MailRecord mailRecord, ILogger _logger) { try { for (int i = 0; i < mailRecord.AttachmentDetails.Count; i++) { AddRevisionDocumentDto revDoc = new AddRevisionDocumentDto { AppKey = mailRecord.AppKey, EditedBy = mailRecord.SenderEmail, FileId = mailRecord.AttachmentDetails[i].FileId, RevisionDate = DateTime.UtcNow, RevisionId = mailRecord.AttachmentDetails[i].HeadRevisionId, Comments = "original" }; await FileRevision.AddRevisionInternal(revDoc, _logger);
FileUploadDto fileUploadDto = new FileUploadDto { AppKey = mailRecord.AppKey, FileContent = mailRecord.Attachments[i], FileId = mailRecord.AttachmentDetails[i].FileId, VersionId = mailRecord.AttachmentDetails[i].HeadRevisionId };
Task uploadTask = CDPBlobStorage.UploadBlobInternal(fileUploadDto, _logger);
mailRecord.ReceiverEmails.ForEach(async (userToAdd) => { AddFileUserDto addFileUserDto = new AddFileUserDto { AppKey = mailRecord.AppKey, FileId = mailRecord.AttachmentDetails[i].FileId, FileName = mailRecord.AttachmentDetails[i].FileName, Email = mailRecord.SenderEmail, EmailToAdd = userToAdd, Policy = "Read" }; await CDPLite.AddFileUserInternal(addFileUserDto); }); } mailRecord.ReceiverEmails.ForEach(async (userToAdd) => { AddFileUserDto addFileUserDto = new AddFileUserDto { AppKey = mailRecord.AppKey, FileId = mailRecord.MailId, FileName = string.Concat(mailRecord.MailId, "-", "MailBody"), Email = mailRecord.SenderEmail, EmailToAdd = userToAdd, Policy = "Read" }; await CDPLite.AddFileUserInternal(addFileUserDto); }); } catch (Exception ex) { _logger.LogError(ex.ToString()); return; } }
public static async Task ProcessMailEventConcurrent(MailRecord mailRecord, ILogger _logger) { List<Task> revisionTasks = new List<Task>(); List<Task> uploadTasks = new List<Task>(); List<Task> addPolicyTasks = new List<Task>();
for (int i = 0; i < mailRecord.AttachmentDetails.Count; i++) { AddRevisionDocumentDto revDoc = new AddRevisionDocumentDto { AppKey = mailRecord.AppKey, EditedBy = mailRecord.SenderEmail, FileId = mailRecord.AttachmentDetails[i].FileId, RevisionDate = DateTime.UtcNow, RevisionId = mailRecord.AttachmentDetails[i].HeadRevisionId, Comments = "original" }; Task revTask = FileRevision.AddRevisionInternal(revDoc, _logger);
revisionTasks.Add(revTask);
FileUploadDto fileUploadDto = new FileUploadDto { AppKey = mailRecord.AppKey, FileContent = mailRecord.Attachments[i], FileId = mailRecord.AttachmentDetails[i].FileId, VersionId = mailRecord.AttachmentDetails[i].HeadRevisionId };
Task uploadTask = CDPBlobStorage.UploadBlobInternal(fileUploadDto, _logger);
mailRecord.ReceiverEmails.ForEach(userToAdd => { AddFileUserDto addFileUserDto = new AddFileUserDto { AppKey = mailRecord.AppKey, FileId = mailRecord.AttachmentDetails[i].FileId, FileName = mailRecord.AttachmentDetails[i].FileName, Email = mailRecord.SenderEmail, EmailToAdd = userToAdd, Policy = "Read" }; Task addPolicy = CDPLite.AddFileUserInternal(addFileUserDto); addPolicyTasks.Add(addPolicy); }); } mailRecord.ReceiverEmails.ForEach(userToAdd => { AddFileUserDto addFileUserDto = new AddFileUserDto { AppKey = mailRecord.AppKey, FileId = mailRecord.MailId, FileName = string.Concat(mailRecord.MailId, "-", "MailBody"), Email = mailRecord.SenderEmail, EmailToAdd = userToAdd, Policy = "Read" }; Task addPolicy = CDPLite.AddFileUserInternal(addFileUserDto); }); _logger.LogInformation("revTasks: {0} AddFileTasks: {1} uploadTasks: {2}", revisionTasks.Count, addPolicyTasks.Count, uploadTasks.Count); try { await Task.WhenAll(uploadTasks); } catch (AggregateException ex) { ex.Handle(ex => { _logger.LogError("upload failed with message: {0}", ex.ToString()); return true; }); }
try { await Task.WhenAll(revisionTasks); } catch (AggregateException ex) { ex.Handle(ex => { _logger.LogError("add revision failed with message: {0}", ex.ToString()); return true; }); }
try { await Task.WhenAll(addPolicyTasks); } catch (AggregateException ex) { ex.Handle(ex => { _logger.LogError("add policy failed with message: {0}", ex.ToString()); return true; }); }
}
} }
|