public QueueItemViewModel UpdateAttachedFiles(QueueItem queueItem, UpdateQueueItemViewModel request) { if (queueItem == null) { throw new EntityDoesNotExistException("Queue item could not be found or does not exist"); } queueItem.DataJson = request.DataJson; queueItem.Event = request.Event; queueItem.ExpireOnUTC = request.ExpireOnUTC; queueItem.PostponeUntilUTC = request.PostponeUntilUTC; queueItem.Name = request.Name; queueItem.QueueId = request.QueueId.Value; queueItem.Source = request.Source; queueItem.Type = request.Type; queueItem.State = request.State; if (queueItem.State == "New") { queueItem.StateMessage = null; queueItem.RetryCount = 0; } //if files don't exist in file manager: add file entity, upload file, and add email attachment attachment entity var attachments = _queueItemAttachmentRepository.Find(null, q => q.QueueItemId == queueItem.Id)?.Items; string hash = string.Empty; IFormFile[] filesArray = CheckFiles(request.Files, hash, attachments, request.DriveName); var queueItemAttachments = new List <QueueItemAttachment>(); if (filesArray.Length > 0) { queueItemAttachments = AddNewAttachments(queueItem, filesArray, request.DriveName); } _repo.Update(queueItem); //attach new files QueueItemViewModel response = new QueueItemViewModel(); response = response.Map(queueItem); foreach (var attachment in attachments) { queueItemAttachments.Add(attachment); } response.Attachments = queueItemAttachments; return(response); }
public async Task <IActionResult> UpdateFiles(string id, [FromForm] UpdateQueueItemViewModel request) { try { var queueItem = repository.GetOne(Guid.Parse(id)); var response = _manager.UpdateAttachedFiles(queueItem, request); await _webhookPublisher.PublishAsync("QueueItems.QueueItemUpdated", queueItem.Id.ToString(), queueItem.Name).ConfigureAwait(false); return(Ok(response)); } catch (Exception ex) { return(ex.GetActionResult()); } }
public async Task <IActionResult> UpdateFiles(string id, [FromForm] UpdateQueueItemViewModel request) { var queueItem = repository.GetOne(Guid.Parse(id)); if (queueItem == null) { return(NotFound()); } queueItem.DataJson = request.DataJson; queueItem.Event = request.Event; queueItem.ExpireOnUTC = request.ExpireOnUTC; queueItem.PostponeUntilUTC = request.PostponeUntilUTC; queueItem.Name = request.Name; queueItem.QueueId = (Guid)request.QueueId; queueItem.Source = request.Source; queueItem.Type = request.Type; queueItem.State = request.State; if (queueItem.State == "New") { queueItem.StateMessage = null; queueItem.RetryCount = 0; } await webhookPublisher.PublishAsync("QueueItems.QueueItemUpdated", queueItem.Id.ToString(), queueItem.Name).ConfigureAwait(false); //attach new files var binaryObjects = manager.UpdateAttachedFiles(request, queueItem); foreach (var binaryObject in binaryObjects) { await webhookPublisher.PublishAsync("Files.NewFileCreated", binaryObject.Id.ToString(), binaryObject.Name).ConfigureAwait(false); } QueueItemViewModel response = new QueueItemViewModel(); response = response.Map(queueItem); var binaryObjectIds = new List <Guid?>(); foreach (var binaryObject in binaryObjects) { binaryObjectIds.Add(binaryObject.Id); } response.BinaryObjectIds = binaryObjectIds; return(Ok(response)); }
public List <BinaryObject> UpdateAttachedFiles(UpdateQueueItemViewModel request, QueueItem queueItem) { var attachments = queueItemAttachmentRepository.Find(null, q => q.QueueItemId == request.Id)?.Items; var files = request.Files.ToList(); foreach (var attachment in attachments) { var binaryObject = binaryObjectRepository.GetOne(attachment.BinaryObjectId); //check if file with same hash and queue item id already exists foreach (var file in request.Files) { byte[] bytes = Array.Empty <byte>(); using (var ms = new MemoryStream()) { file.CopyToAsync(ms); bytes = ms.ToArray(); } string hash = string.Empty; using (SHA256 sha256Hash = SHA256.Create()) { hash = binaryObjectManager.GetHash(sha256Hash, bytes); } if (binaryObject.HashCode == hash && binaryObject.CorrelationEntityId == request.Id) { files.Remove(file); } } } //if file doesn't exist in binary objects (list of files): add binary object entity, upload file, and add queue item attachment entity var binaryObjects = AttachFiles(files, (Guid)queueItem.Id, queueItem); return(binaryObjects); }