From 42da7e5f4338516caeb9905e0985b6bd84bb0204 Mon Sep 17 00:00:00 2001 From: pancakes Date: Wed, 18 Dec 2024 16:02:55 +1000 Subject: [PATCH] [backend/api] Add endpoint to delete non-empty folders --- .../Controllers/Web/DriveController.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Iceshrimp.Backend/Controllers/Web/DriveController.cs b/Iceshrimp.Backend/Controllers/Web/DriveController.cs index 3d8693c4..b97d3e04 100644 --- a/Iceshrimp.Backend/Controllers/Web/DriveController.cs +++ b/Iceshrimp.Backend/Controllers/Web/DriveController.cs @@ -332,6 +332,34 @@ public class DriveController( return new DriveFolderResponse { Id = folder.Id, Name = folder.Name, ParentId = folder.ParentId }; } + [HttpDelete("folder/{id}")] + [Authenticate] + [Authorize] + [ProducesResults(HttpStatusCode.OK)] + [ProducesErrors(HttpStatusCode.BadRequest, HttpStatusCode.NotFound, HttpStatusCode.Conflict)] + public async Task DeleteFolder(string id) + { + var user = HttpContext.GetUserOrFail(); + + if (string.IsNullOrWhiteSpace(id)) + throw GracefulException.BadRequest("Cannot delete root folder"); + + var folder = await db.DriveFolders + .FirstOrDefaultAsync(p => p.Id == id && p.UserId == user.Id) + ?? throw GracefulException.RecordNotFound(); + + var driveFiles = await db.DriveFiles + .CountAsync(p => p.FolderId == id); + var driveFolders = await db.DriveFolders + .CountAsync(p => p.ParentId == id); + + if (driveFiles != 0 || driveFolders != 0) + throw GracefulException.Conflict("Cannot delete a non-empty folder"); + + db.Remove(folder); + await db.SaveChangesAsync(); + } + [HttpPut("folder/{id}/move")] [Authenticate] [Authorize]