Temporary repo to track my changes on LTS functions app porting
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
6.9 KiB

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;
});
}
}
}
}