✨ Delete files in batch API
This commit is contained in:
@@ -333,6 +333,22 @@ public class FileController(
|
|||||||
return Ok(files);
|
return Ok(files);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class FileBatchDeletionRequest
|
||||||
|
{
|
||||||
|
public List<string> FileIds { get; set; } = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
[Authorize]
|
||||||
|
[HttpPost("batches/delete")]
|
||||||
|
public async Task<ActionResult> DeleteFileBatch([FromBody] FileBatchDeletionRequest request)
|
||||||
|
{
|
||||||
|
if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized();
|
||||||
|
var userId = Guid.Parse(currentUser.Id);
|
||||||
|
|
||||||
|
var count = await fs.DeleteAccountFileBatchAsync(userId, request.FileIds);
|
||||||
|
return Ok(new { Count = count });
|
||||||
|
}
|
||||||
|
|
||||||
[Authorize]
|
[Authorize]
|
||||||
[HttpDelete("{id}")]
|
[HttpDelete("{id}")]
|
||||||
public async Task<ActionResult<SnCloudFile>> DeleteFile(string id)
|
public async Task<ActionResult<SnCloudFile>> DeleteFile(string id)
|
||||||
@@ -371,4 +387,4 @@ public class FileController(
|
|||||||
var count = await fs.DeleteAllRecycledFilesAsync();
|
var count = await fs.DeleteAllRecycledFilesAsync();
|
||||||
return Ok(new { Count = count });
|
return Ok(new { Count = count });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -718,6 +718,21 @@ public class FileService(
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<int> DeleteAccountFileBatchAsync(Guid accountId, List<string> fileIds)
|
||||||
|
{
|
||||||
|
var files = await db.Files
|
||||||
|
.Where(f => f.AccountId == accountId && fileIds.Contains(f.Id))
|
||||||
|
.ToListAsync();
|
||||||
|
var count = files.Count;
|
||||||
|
var tasks = files.Select(f => DeleteFileDataAsync(f, true));
|
||||||
|
await Task.WhenAll(tasks);
|
||||||
|
var fileIdsList = files.Select(f => f.Id).ToList();
|
||||||
|
await _PurgeCacheRangeAsync(fileIdsList);
|
||||||
|
db.RemoveRange(files);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<int> DeletePoolRecycledFilesAsync(Guid poolId)
|
public async Task<int> DeletePoolRecycledFilesAsync(Guid poolId)
|
||||||
{
|
{
|
||||||
var files = await db.Files
|
var files = await db.Files
|
||||||
@@ -788,4 +803,4 @@ file class UpdatableCloudFile(SnCloudFile file)
|
|||||||
.SetProperty(f => f.UserMeta, userMeta)
|
.SetProperty(f => f.UserMeta, userMeta)
|
||||||
.SetProperty(f => f.IsMarkedRecycle, IsMarkedRecycle);
|
.SetProperty(f => f.IsMarkedRecycle, IsMarkedRecycle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user