namespace ASC.Files.Api; public class OperationController : ApiControllerBase { private readonly FileOperationDtoHelper _fileOperationWraperHelper; private readonly FileStorageService _fileStorageServiceString; public OperationController( FilesControllerHelper filesControllerHelperInt, FilesControllerHelper filesControllerHelperString, FileOperationDtoHelper fileOperationWraperHelper, FileStorageService fileStorageServiceString) : base(filesControllerHelperInt, filesControllerHelperString) { _fileOperationWraperHelper = fileOperationWraperHelper; _fileStorageServiceString = fileStorageServiceString; } /// /// Start downlaod process of files and folders with ID /// /// Finish file operations /// File ID list for download with convert to format /// File ID list /// Folder ID list /// File operations /// Operation result [Update("fileops/bulkdownload")] public Task> BulkDownload([FromBody] DownloadRequestDto requestDto) { return _filesControllerHelperString.BulkDownloadAsync(requestDto); } [Update("fileops/bulkdownload")] [Consumes("application/x-www-form-urlencoded")] public Task> BulkDownloadFromForm([FromForm] DownloadRequestDto requestDto) { return _filesControllerHelperString.BulkDownloadAsync(requestDto); } /// /// Copies all the selected files and folders to the folder with the ID specified in the request /// /// Copy to folder /// File operations /// Destination folder ID /// Folder ID list /// File ID list /// Overwriting behavior: skip(0), overwrite(1) or duplicate(2) /// Delete after finished /// Operation result [Update("fileops/copy")] public Task> CopyBatchItemsFromBody([FromBody] BatchRequestDto requestDto) { return _filesControllerHelperString.CopyBatchItemsAsync(requestDto); } [Update("fileops/copy")] [Consumes("application/x-www-form-urlencoded")] public Task> CopyBatchItemsFromForm([FromForm][ModelBinder(BinderType = typeof(BatchModelBinder))] BatchRequestDto requestDto) { return _filesControllerHelperString.CopyBatchItemsAsync(requestDto); } /// /// Deletes the files and folders with the IDs specified in the request /// /// Folder ID list /// File ID list /// Delete after finished /// Don't move to the Recycle Bin /// Delete files and folders /// File operations /// Operation result [Update("fileops/delete")] public async IAsyncEnumerable DeleteBatchItemsFromBody([FromBody] DeleteBatchRequestDto requestDto) { var tasks = _fileStorageServiceString.DeleteItems("delete", requestDto.FileIds.ToList(), requestDto.FolderIds.ToList(), false, requestDto.DeleteAfter, requestDto.Immediately); foreach (var e in tasks) { yield return await _fileOperationWraperHelper.GetAsync(e); } } [Update("fileops/delete")] [Consumes("application/x-www-form-urlencoded")] public async IAsyncEnumerable DeleteBatchItemsFromForm([FromForm][ModelBinder(BinderType = typeof(DeleteBatchModelBinder))] DeleteBatchRequestDto requestDto) { var tasks = _fileStorageServiceString.DeleteItems("delete", requestDto.FileIds.ToList(), requestDto.FolderIds.ToList(), false, requestDto.DeleteAfter, requestDto.Immediately); foreach (var e in tasks) { yield return await _fileOperationWraperHelper.GetAsync(e); } } /// /// Deletes all files and folders from the recycle bin /// /// Clear recycle bin /// File operations /// Operation result [Update("fileops/emptytrash")] public Task> EmptyTrashAsync() { return _filesControllerHelperInt.EmptyTrashAsync(); } /// /// Returns the list of all active file operations /// /// Get file operations list /// File operations /// Operation result [Read("fileops")] public async Task> GetOperationStatuses() { var result = new List(); foreach (var e in _fileStorageServiceString.GetTasksStatuses()) { result.Add(await _fileOperationWraperHelper.GetAsync(e)); } return result; } /// /// Marks all files and folders as read /// /// Mark as read /// File operations /// Operation result [Update("fileops/markasread")] public Task> MarkAsReadFromBody([FromBody] BaseBatchRequestDto requestDto) { return _filesControllerHelperString.MarkAsReadAsync(requestDto); } [Update("fileops/markasread")] [Consumes("application/x-www-form-urlencoded")] public Task> MarkAsReadFromForm([FromForm][ModelBinder(BinderType = typeof(BaseBatchModelBinder))] BaseBatchRequestDto requestDto) { return _filesControllerHelperString.MarkAsReadAsync(requestDto); } /// /// Moves all the selected files and folders to the folder with the ID specified in the request /// /// Move to folder /// File operations /// Destination folder ID /// Folder ID list /// File ID list /// Overwriting behavior: skip(0), overwrite(1) or duplicate(2) /// Delete after finished /// Operation result [Update("fileops/move")] public Task> MoveBatchItemsFromBody([FromBody] BatchRequestDto requestDto) { return _filesControllerHelperString.MoveBatchItemsAsync(requestDto); } [Update("fileops/move")] [Consumes("application/x-www-form-urlencoded")] public Task> MoveBatchItemsFromForm([FromForm][ModelBinder(BinderType = typeof(BatchModelBinder))] BatchRequestDto requestDto) { return _filesControllerHelperString.MoveBatchItemsAsync(requestDto); } /// /// Checking for conflicts /// /// File operations /// Destination folder ID /// Folder ID list /// File ID list /// Conflicts file ids [Read("fileops/move")] public IAsyncEnumerable MoveOrCopyBatchCheckAsync([ModelBinder(BinderType = typeof(BatchModelBinder))] BatchRequestDto requestDto) { return _filesControllerHelperString.MoveOrCopyBatchCheckAsync(requestDto); } /// /// Finishes all the active file operations /// /// Finish all /// File operations /// Operation result [Update("fileops/terminate")] public async IAsyncEnumerable TerminateTasks() { var tasks = _fileStorageServiceString.TerminateTasks(); foreach (var e in tasks) { yield return await _fileOperationWraperHelper.GetAsync(e); } } }