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