public Asset UpdateAssetFile(string id, UpdateAssetViewModel request)
        {
            var existingAsset = GetAsset(id);

            string fileId = existingAsset.FileId.ToString();
            var    file   = _fileManager.GetFileFolder(fileId, request.DriveName);

            if (file == null)
            {
                throw new EntityDoesNotExistException($"Asset file with id {fileId} could not be found or doesn't exist");
            }

            file.StoragePath = Path.Combine(file.StoragePath, request.File.FileName);
            file.ContentType = request.File.ContentType;
            file.Name        = request.File.FileName;
            file.Size        = request.File.Length;
            file.Files       = new IFormFile[] { request.File };

            _fileManager.UpdateFile(file);

            existingAsset.SizeInBytes = file.Size;

            AssetNameAvailability(existingAsset);

            return(existingAsset);
        }
        public async Task <IActionResult> Put(string id, [FromForm] UpdateAssetViewModel request)
        {
            try
            {
                var existingAsset = _manager.UpdateAssetFile(id, request);

                //update asset entity
                await _webhookPublisher.PublishAsync("Assets.AssetUpdated", existingAsset.Id.ToString(), existingAsset.Name).ConfigureAwait(false);

                await base.PutEntity(id, existingAsset);

                return(Ok(existingAsset));
            }
            catch (Exception ex)
            {
                return(ex.GetActionResult());
            }
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Put(string id, [FromForm] UpdateAssetViewModel request)
        {
            try
            {
                Guid entityId      = new Guid(id);
                var  existingAsset = repository.GetOne(entityId);
                if (existingAsset == null)
                {
                    return(NotFound());
                }

                string binaryObjectId = existingAsset.BinaryObjectID.ToString();
                var    binaryObject   = binaryObjectRepo.GetOne(Guid.Parse(binaryObjectId));

                string organizationId = binaryObject.OrganizationId.ToString();
                if (!string.IsNullOrEmpty(organizationId))
                {
                    organizationId = processManager.GetOrganizationId().ToString();
                }

                if (request.Name != null)
                {
                    var asset = repository.Find(null, d => d.Name.ToLower(null) == request.Name.ToLower(null))?.Items?.FirstOrDefault();
                    if (asset != null && asset.Id != entityId)
                    {
                        ModelState.AddModelError("Asset", "Asset Name Already Exists");
                        return(BadRequest(ModelState));
                    }
                }

                if (request == null)
                {
                    ModelState.AddModelError("Save", "No data passed");
                }

                long size = request.file == null ? 0 : request.file.Length;

                try
                {
                    if (!string.IsNullOrEmpty(request.Name))
                    {
                        existingAsset.Name = request.Name;
                    }
                    else
                    {
                        existingAsset.Name = existingAsset.Name;
                    }

                    if (!string.IsNullOrEmpty(request.Type))
                    {
                        existingAsset.Type = request.Type;
                    }
                    else
                    {
                        existingAsset.Type = existingAsset.Type;
                    }

                    existingAsset.TextValue   = request.TextValue;
                    existingAsset.NumberValue = request.NumberValue;
                    existingAsset.JsonValue   = request.JsonValue;

                    if (existingAsset.BinaryObjectID != Guid.Empty && size > 0)
                    {
                        //Update Asset file in OpenBots.Server.Web using relative directory
                        string apiComponent = "AssetAPI";
                        await processManager.Update(existingAsset.BinaryObjectID.Value, request.file, organizationId, apiComponent, request.file.FileName);
                    }

                    //Update Asset entity
                    await base.PutEntity(id, existingAsset);

                    return(Ok(existingAsset));
                }
                catch (Exception ex)
                {
                    return(ex.GetActionResult());
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("Asset", ex.Message);
                return(BadRequest(ModelState));
            }
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> Put(string id, [FromForm] UpdateAssetViewModel request)
        {
            try
            {
                Guid entityId      = new Guid(id);
                var  existingAsset = repository.GetOne(Guid.Parse(id));
                if (existingAsset == null)
                {
                    ModelState.AddModelError("Asset", "Asset cannot be found or does not exist.");
                    return(NotFound(ModelState));
                }

                string binaryObjectId = existingAsset.BinaryObjectID.ToString();
                var    binaryObject   = binaryObjectRepo.GetOne(Guid.Parse(binaryObjectId));

                string organizationId = binaryObject.OrganizationId.ToString();
                if (!string.IsNullOrEmpty(organizationId))
                {
                    organizationId = automationManager.GetOrganizationId().ToString();
                }

                if (request.Name != null)
                {
                    var asset = repository.Find(null, d => d.Name.ToLower(null) == request.Name.ToLower(null))?.Items?.FirstOrDefault();
                    if (asset != null && asset.Id != entityId)
                    {
                        ModelState.AddModelError("Asset", "Asset name already exists");
                        return(BadRequest(ModelState));
                    }
                }
                if (request.File == null)
                {
                    ModelState.AddModelError("Save", "No asset uploaded");
                    return(BadRequest(ModelState));
                }

                long size = request.File == null ? 0 : request.File.Length;
                if (size <= 0)
                {
                    ModelState.AddModelError("Asset Upload", $"File size of asset {request.File.FileName} cannot be 0");
                    return(BadRequest(ModelState));
                }

                try
                {
                    if (!string.IsNullOrEmpty(request.Name))
                    {
                        existingAsset.Name = request.Name;
                    }
                    else
                    {
                        existingAsset.Name = existingAsset.Name;
                    }

                    if (!string.IsNullOrEmpty(request.Type))
                    {
                        existingAsset.Type = request.Type;
                    }
                    else
                    {
                        existingAsset.Type = existingAsset.Type;
                    }

                    existingAsset.TextValue   = request.TextValue;
                    existingAsset.NumberValue = request.NumberValue;
                    existingAsset.JsonValue   = request.JsonValue;
                    existingAsset.SizeInBytes = request.File.Length;

                    if (existingAsset.BinaryObjectID != Guid.Empty && size > 0)
                    {
                        //update asset file in OpenBots.Server.Web using relative directory
                        string apiComponent = "AssetAPI";
                        await automationManager.Update(existingAsset.BinaryObjectID.Value, request.File, organizationId, apiComponent, request.File.FileName);
                    }

                    //update asset entity
                    await webhookPublisher.PublishAsync("Assets.AssetUpdated", existingAsset.Id.ToString(), existingAsset.Name).ConfigureAwait(false);

                    await base.PutEntity(id, existingAsset);

                    return(Ok(existingAsset));
                }
                catch (Exception ex)
                {
                    return(ex.GetActionResult());
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("Asset", ex.Message);
                return(BadRequest(ModelState));
            }
        }