public async Task DeleteFolderAsync(UserDto userDto, string id)
        {
            var user = mapper.Map <UserDto, User>(userDto);

            if (Guid.TryParse(id, out Guid storageItemId) == false)
            {
                throw new ArgumentException($"{id} is not valid id");
            }

            var folderToDelete =
                await unitOfWork.StorageItems.GetFolderByUserAndFolderIdAsync(user, storageItemId);

            if (folderToDelete == null)
            {
                throw new ArgumentException("Folder doesn't exists");
            }

            string fullPath = StorageItemsHelpers.GetStorageItemFullPath(targetPath, folderToDelete.RelativePath);

            if (!folderManager.IsFolderExists(fullPath))
            {
                folderManager.DeleteFolder(fullPath);
            }

            unitOfWork.StorageItems.Remove(folderToDelete);
            await unitOfWork.CommitAsync();
        }
        public async Task <FileItemDto> CreateFileAsync(UserDto userDto, IFormFile file)
        {
            var user          = mapper.Map <UserDto, User>(userDto);
            var primaryFolder = await unitOfWork.StorageItems.GetUserPrimaryFolderAsync(user);

            if (primaryFolder == null)
            {
                throw new ArgumentNullException("User doesn't have primary folder");
            }
            else
            {
                try
                {
                    var formFileContent = await file.ProcessFormFileAsync(fileSizeLimit);

                    var fileItem = file.CreateFileItemFormFile(primaryFolder, user);

                    string fullPath = StorageItemsHelpers.GetStorageItemFullPath(targetPath, fileItem.RelativePath);
                    await fileManager.CreateFileAsync(fullPath, formFileContent);

                    await unitOfWork.StorageItems.AddAsync(fileItem);

                    await unitOfWork.CommitAsync();

                    var fileDto = mapper.Map <StorageItem, FileItemDto>(fileItem);
                    return(fileDto);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        public async Task <StorageItem> CreateFolderAsync(FolderCreateRequestDto folderCreate)
        {
            var folder = mapper.Map <FolderCreateRequestDto, StorageItem>(folderCreate);

            folder.TrustedName  = StorageItemsHelpers.GetStorageItemTrustedName();
            folder.RelativePath = StorageItemsHelpers.GetFolderRelativePath(folder);

            var existingFolderInDirectory =
                await unitOfWork.StorageItems.GetFolderByTrustedNameAsync(folder.TrustedName);

            string fullPath = StorageItemsHelpers.GetStorageItemFullPath(targetPath, folder.RelativePath);

            if (existingFolderInDirectory == null && !folderManager.IsFolderExists(fullPath))
            {
                await unitOfWork.StorageItems.AddAsync(folder);

                await unitOfWork.CommitAsync();

                folderManager.CreateFolder(fullPath);

                return(folder);
            }
            else
            {
                throw new ArgumentException("Folder has been already exists!");
            }
        }
        public async Task DeleteFileAsync(string fileId)
        {
            var file = await GetActualItemByIdAsync(fileId);

            var filePath = StorageItemsHelpers.GetStorageItemFullPath(targetPath, file.RelativePath);

            fileManager.DeleteFile(filePath);

            unitOfWork.StorageItems.Remove(file);
            await unitOfWork.CommitAsync();
        }
        public async Task DeleteRecycledItemAsync(UserDto userDto, string fileId)
        {
            var file = await GetRecycledItemByUserAndItemIdAsync(userDto, fileId);

            var filePath = StorageItemsHelpers.GetStorageItemFullPath(targetPath, file.RelativePath);

            fileManager.DeleteFile(filePath);

            unitOfWork.StorageItems.Remove(file);
            await unitOfWork.CommitAsync();
        }
        public async Task <(MemoryStream stream, string contentType, string fileName)> DownloadFileAsync(
            UserDto userDto, string fileId)
        {
            var fileItem = await GetActualItemByUserAndItemIdAsync(userDto, fileId);

            var filePath = StorageItemsHelpers.GetStorageItemFullPath(targetPath, fileItem.RelativePath);

            var stream = await fileManager.ReadFileAsync(filePath);

            stream.Position = 0;

            return(stream, StorageItemsHelpers.GetContentType(filePath), fileItem.DisplayName);
        }
Example #7
0
        public void Exception_Relative_File_Path_For_Folder()
        {
            var file = new StorageItem()
            {
                DisplayName = "testDisplay",
                TrustedName = "testTrust",
                IsFolder    = true
            };

            Assert.That(() => StorageItemsHelpers.GetFileRelativePath(file),
                        Throws.TypeOf <ArgumentException>()
                        .With.Matches <ArgumentException>(
                            ex => ex.Message == "Item should be a file."));
        }
Example #8
0
        public void Exception_Relative_File_Path_Without_Parent_Folder()
        {
            var folder = new StorageItem()
            {
                DisplayName  = "testDisplay",
                TrustedName  = "testTrust",
                IsFolder     = false,
                ParentFolder = null
            };

            Assert.That(() => StorageItemsHelpers.GetFileRelativePath(folder),
                        Throws.TypeOf <ArgumentException>()
                        .With.Matches <ArgumentException>(
                            ex => ex.Message == "File should contain a parent folder."));
        }
Example #9
0
        public void Exception_Relative_NonPrimary_Folder_Path_Without_Parent()
        {
            var folder = new StorageItem()
            {
                DisplayName     = "testDisplay",
                TrustedName     = "testTrust",
                IsFolder        = true,
                IsPrimaryFolder = false,
                ParentFolder    = null
            };

            Assert.That(() => StorageItemsHelpers.GetFolderRelativePath(folder),
                        Throws.TypeOf <ArgumentException>()
                        .With.Matches <ArgumentException>(
                            ex => ex.Message == "Non-primary folder should have a parent folder"));
        }
Example #10
0
        public async Task <(MemoryStream stream, string contentType, string fileName)> DownloadFileAsync(string fileId)
        {
            if (Guid.TryParse(fileId, out Guid storageItemId) == false)
            {
                throw new ArgumentException($"{fileId} is not valid id");
            }

            var fileItem = await unitOfWork.StorageItems.GetPublicFileByIdAsync(storageItemId);

            if (fileItem == null)
            {
                throw new StorageItemNotFoundException($"File for current user does not exist.");
            }

            var filePath = StorageItemsHelpers.GetStorageItemFullPath(targetPath, fileItem.RelativePath);

            var stream = await fileManager.ReadFileAsync(filePath);

            stream.Position = 0;

            return(stream, StorageItemsHelpers.GetContentType(filePath), fileItem.DisplayName);
        }