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

  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.Azure.Functions.Worker;
  4. using Microsoft.Extensions.Logging;
  5. namespace CDP
  6. {
  7. public class MailProcessor
  8. {
  9. private readonly ILogger<MailProcessor> _logger;
  10. public MailProcessor(ILogger<MailProcessor> logger)
  11. {
  12. _logger = logger;
  13. }
  14. public static async Task ProcessMailEvent(MailRecord mailRecord, ILogger _logger)
  15. {
  16. try
  17. {
  18. for (int i = 0; i < mailRecord.AttachmentDetails.Count; i++)
  19. {
  20. AddRevisionDocumentDto revDoc = new AddRevisionDocumentDto
  21. {
  22. AppKey = mailRecord.AppKey,
  23. EditedBy = mailRecord.SenderEmail,
  24. FileId = mailRecord.AttachmentDetails[i].FileId,
  25. RevisionDate = DateTime.UtcNow,
  26. RevisionId = mailRecord.AttachmentDetails[i].HeadRevisionId,
  27. Comments = "original"
  28. };
  29. await FileRevision.AddRevisionInternal(revDoc, _logger);
  30. FileUploadDto fileUploadDto = new FileUploadDto
  31. {
  32. AppKey = mailRecord.AppKey,
  33. FileContent = mailRecord.Attachments[i],
  34. FileId = mailRecord.AttachmentDetails[i].FileId,
  35. VersionId = mailRecord.AttachmentDetails[i].HeadRevisionId
  36. };
  37. Task uploadTask = CDPBlobStorage.UploadBlobInternal(fileUploadDto, _logger);
  38. mailRecord.ReceiverEmails.ForEach(async (userToAdd) =>
  39. {
  40. AddFileUserDto addFileUserDto = new AddFileUserDto
  41. {
  42. AppKey = mailRecord.AppKey,
  43. FileId = mailRecord.AttachmentDetails[i].FileId,
  44. FileName = mailRecord.AttachmentDetails[i].FileName,
  45. Email = mailRecord.SenderEmail,
  46. EmailToAdd = userToAdd,
  47. Policy = "Read"
  48. };
  49. await CDPLite.AddFileUserInternal(addFileUserDto);
  50. });
  51. }
  52. mailRecord.ReceiverEmails.ForEach(async (userToAdd) =>
  53. {
  54. AddFileUserDto addFileUserDto = new AddFileUserDto
  55. {
  56. AppKey = mailRecord.AppKey,
  57. FileId = mailRecord.MailId,
  58. FileName = string.Concat(mailRecord.MailId, "-", "MailBody"),
  59. Email = mailRecord.SenderEmail,
  60. EmailToAdd = userToAdd,
  61. Policy = "Read"
  62. };
  63. await CDPLite.AddFileUserInternal(addFileUserDto);
  64. });
  65. } catch (Exception ex)
  66. {
  67. _logger.LogError(ex.ToString());
  68. return;
  69. }
  70. }
  71. public static async Task ProcessMailEventConcurrent(MailRecord mailRecord, ILogger _logger)
  72. {
  73. List<Task> revisionTasks = new List<Task>();
  74. List<Task> uploadTasks = new List<Task>();
  75. List<Task> addPolicyTasks = new List<Task>();
  76. for (int i = 0; i < mailRecord.AttachmentDetails.Count; i++)
  77. {
  78. AddRevisionDocumentDto revDoc = new AddRevisionDocumentDto
  79. {
  80. AppKey = mailRecord.AppKey,
  81. EditedBy = mailRecord.SenderEmail,
  82. FileId = mailRecord.AttachmentDetails[i].FileId,
  83. RevisionDate = DateTime.UtcNow,
  84. RevisionId = mailRecord.AttachmentDetails[i].HeadRevisionId,
  85. Comments = "original"
  86. };
  87. Task revTask = FileRevision.AddRevisionInternal(revDoc, _logger);
  88. revisionTasks.Add(revTask);
  89. FileUploadDto fileUploadDto = new FileUploadDto
  90. {
  91. AppKey = mailRecord.AppKey,
  92. FileContent = mailRecord.Attachments[i],
  93. FileId = mailRecord.AttachmentDetails[i].FileId,
  94. VersionId = mailRecord.AttachmentDetails[i].HeadRevisionId
  95. };
  96. Task uploadTask = CDPBlobStorage.UploadBlobInternal(fileUploadDto, _logger);
  97. mailRecord.ReceiverEmails.ForEach(userToAdd =>
  98. {
  99. AddFileUserDto addFileUserDto = new AddFileUserDto
  100. {
  101. AppKey = mailRecord.AppKey,
  102. FileId = mailRecord.AttachmentDetails[i].FileId,
  103. FileName = mailRecord.AttachmentDetails[i].FileName,
  104. Email = mailRecord.SenderEmail,
  105. EmailToAdd = userToAdd,
  106. Policy = "Read"
  107. };
  108. Task addPolicy = CDPLite.AddFileUserInternal(addFileUserDto);
  109. addPolicyTasks.Add(addPolicy);
  110. });
  111. }
  112. mailRecord.ReceiverEmails.ForEach(userToAdd =>
  113. {
  114. AddFileUserDto addFileUserDto = new AddFileUserDto
  115. {
  116. AppKey = mailRecord.AppKey,
  117. FileId = mailRecord.MailId,
  118. FileName = string.Concat(mailRecord.MailId, "-", "MailBody"),
  119. Email = mailRecord.SenderEmail,
  120. EmailToAdd = userToAdd,
  121. Policy = "Read"
  122. };
  123. Task addPolicy = CDPLite.AddFileUserInternal(addFileUserDto);
  124. });
  125. _logger.LogInformation("revTasks: {0} AddFileTasks: {1} uploadTasks: {2}", revisionTasks.Count, addPolicyTasks.Count, uploadTasks.Count);
  126. try
  127. {
  128. await Task.WhenAll(uploadTasks);
  129. }
  130. catch (AggregateException ex)
  131. {
  132. ex.Handle(ex =>
  133. {
  134. _logger.LogError("upload failed with message: {0}", ex.ToString());
  135. return true;
  136. });
  137. }
  138. try
  139. {
  140. await Task.WhenAll(revisionTasks);
  141. }
  142. catch (AggregateException ex)
  143. {
  144. ex.Handle(ex =>
  145. {
  146. _logger.LogError("add revision failed with message: {0}", ex.ToString());
  147. return true;
  148. });
  149. }
  150. try
  151. {
  152. await Task.WhenAll(addPolicyTasks);
  153. }
  154. catch (AggregateException ex)
  155. {
  156. ex.Handle(ex =>
  157. {
  158. _logger.LogError("add policy failed with message: {0}", ex.ToString());
  159. return true;
  160. });
  161. }
  162. }
  163. }
  164. }