diff --git a/Seasoned.Backend/Controllers/RecipeController.cs b/Seasoned.Backend/Controllers/RecipeController.cs index 843efb3..d59782c 100644 --- a/Seasoned.Backend/Controllers/RecipeController.cs +++ b/Seasoned.Backend/Controllers/RecipeController.cs @@ -155,4 +155,23 @@ public class RecipeController : ControllerBase return Ok(results); } + + [HttpDelete("{id}")] + public async Task DeleteRecipe(int id) + { + var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); + + var recipe = await _context.Recipes + .FirstOrDefaultAsync(r => r.Id == id && r.UserId == userId); + + if (recipe == null) + { + return NotFound("Recipe not found or you don't have permission to delete it."); + } + + _context.Recipes.Remove(recipe); + await _context.SaveChangesAsync(); + + return Ok(new { message = "Recipe deleted from your archives." }); + } } \ No newline at end of file diff --git a/Seasoned.Frontend/app/pages/gallery.vue b/Seasoned.Frontend/app/pages/gallery.vue index 41f1688..471c990 100644 --- a/Seasoned.Frontend/app/pages/gallery.vue +++ b/Seasoned.Frontend/app/pages/gallery.vue @@ -70,24 +70,28 @@

- - - Open - - - Edit - - + + Open + + + Edit + + @@ -250,6 +254,46 @@ + + + +
+ + +

+ Remove from Archive? +

+ +
+ + Keep it + + + + Yes, Delete + +
+
+
+
@@ -269,6 +313,9 @@ const config = useRuntimeConfig() const searchQuery = ref('') const isSearching = ref(false) let debounceTimeout = null +const deleteConfirmVisible = ref(false) +const recipeToDelete = ref(null) +const isDeleting = ref(false) onMounted(async () => { await fetchRecipes() @@ -404,5 +451,31 @@ watch(searchQuery, (newVal) => { }, 600) }) +const deleteRecipe = (id) => { + recipeToDelete.value = id + deleteConfirmVisible.value = true +} + +const confirmDelete = async () => { + if (!recipeToDelete.value) return; + + try { + isDeleting.value = true + await $fetch(`${config.public.apiBase}api/recipe/${recipeToDelete.value}`, { + method: 'DELETE', + credentials: 'include' + }); + + recipes.value = recipes.value.filter(r => r.id !== recipeToDelete.value); + + deleteConfirmVisible.value = false; + recipeToDelete.value = null; + } catch (err) { + console.error("The archive could not be cleared:", err); + } finally { + isDeleting.value = false + } +} + \ No newline at end of file