Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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());
            }
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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);
        }