From 22db062fd9c75274ae87794259779cdeb26308bf Mon Sep 17 00:00:00 2001 From: Marcus Noble Date: Sun, 21 Feb 2021 10:29:07 +0000 Subject: [PATCH] Support deleting feed --- internal/feeds/store.go | 5 +++++ internal/server/api.go | 5 +++++ internal/server/main.go | 1 + views/index.html | 16 ++++++++++++++++ 4 files changed, 27 insertions(+) diff --git a/internal/feeds/store.go b/internal/feeds/store.go index 20da5f8..5fdeebf 100644 --- a/internal/feeds/store.go +++ b/internal/feeds/store.go @@ -33,6 +33,11 @@ func (fs *FeedStore) GetFeed(id string) *Feed { return feed } +func (fs *FeedStore) DeleteFeed(id string) { + fs.getDB().Delete(Feed{ID: id}) + fs.getDB().Unscoped().Delete(Item{}, "feed_id = ?", id) +} + func (fs *FeedStore) GetItem(id string) *Item { item := &Item{} fs.getDB().Where("id = ?", id).First(item) diff --git a/internal/server/api.go b/internal/server/api.go index fb884d6..c06e168 100644 --- a/internal/server/api.go +++ b/internal/server/api.go @@ -17,6 +17,11 @@ func (a *API) GetFeed(c *fiber.Ctx) error { return c.JSON(a.FeedStore.GetFeed(c.Params("id"))) } +func (a *API) DeleteFeed(c *fiber.Ctx) error { + a.FeedStore.DeleteFeed(c.Params("id")) + return nil +} + func (a *API) PostFeed(c *fiber.Ctx) error { url := "" if err := c.BodyParser(&url); err != nil { diff --git a/internal/server/main.go b/internal/server/main.go index 3248657..1e65a40 100644 --- a/internal/server/main.go +++ b/internal/server/main.go @@ -50,6 +50,7 @@ func Start(port string) error { app.Get("/api/feeds", api.GetFeeds) app.Post("/api/feeds", api.PostFeed) app.Get("/api/feed/:id", api.GetFeed) + app.Delete("/api/feed/:id", api.DeleteFeed) app.Get("/api/item/:id", api.GetItem) app.Post("/api/item/:id/save", api.SaveItem) app.Get("/api/unread", api.GetUnread) diff --git a/views/index.html b/views/index.html index 608531d..469a4f5 100644 --- a/views/index.html +++ b/views/index.html @@ -63,6 +63,11 @@
{{feed.Title}} ({{unreadCounts[feed.ID] || '0'}}) +
+ +
@@ -222,6 +227,17 @@ showIframe(item) { document.querySelector(`feed-item[item-id='${item.ID}'`).showIframe(); }, + deleteFeed(feed) { + if (confirm(`Are you sure you want to remove '${feed.Title}'`)) { + this.setBusy(true); + fetch(`/api/feed/${feed.ID}`, {method: "DELETE"}) + .then(() => { + this.feeds = this.feeds.filter(f => f.ID != feed.ID); + this.items = this.items.filter(i => i.FeedID != feed.ID); + this.setBusy(false); + }); + } + }, nextItem() { let currentItem = -1; if (this.selectedItem != undefined) {