diff --git a/internal/feeds/store.go b/internal/feeds/store.go index b63535d..20da5f8 100644 --- a/internal/feeds/store.go +++ b/internal/feeds/store.go @@ -57,6 +57,18 @@ func (fs *FeedStore) GetUnread() *[]ItemWithFeed { return items } +func (fs *FeedStore) GetSaved() *[]ItemWithFeed { + items := &[]ItemWithFeed{} + fs.getDB().Table("items"). + Where("save = ?", true). + Select("items.*, feeds.title as feed_title, feeds.homepage_url as feed_homepage_url"). + Order("items.created desc, items.title"). + Joins("left join feeds on feeds.id = items.feed_id"). + Find(items) + + return items +} + func (fs *FeedStore) DeleteOldReadItems() { t := time.Now() threshold := t.Add(-time.Hour * 24 * 7) @@ -98,3 +110,12 @@ func (fs *FeedStore) MarkAsRead(itemID string) { fs.getDB().Save(*item) } + +func (fs *FeedStore) ToggleSaved(itemID string) { + item := &Item{} + fs.getDB().Where("id = ?", itemID).First(item) + + item.Save = !item.Save + + fs.getDB().Save(*item) +} diff --git a/internal/server/api.go b/internal/server/api.go index 87981cd..fb884d6 100644 --- a/internal/server/api.go +++ b/internal/server/api.go @@ -33,6 +33,10 @@ func (a *API) GetUnread(c *fiber.Ctx) error { return c.JSON(a.FeedStore.GetUnread()) } +func (a *API) GetSaved(c *fiber.Ctx) error { + return c.JSON(a.FeedStore.GetSaved()) +} + func (a *API) GetAll(c *fiber.Ctx) error { return c.JSON(a.FeedStore.GetAll()) } @@ -60,3 +64,8 @@ func (a *API) RefreshAll(c *fiber.Ctx) error { return c.JSON(a.FeedStore.GetUnread()) } + +func (a *API) SaveItem(c *fiber.Ctx) error { + a.FeedStore.ToggleSaved(c.Params("id")) + return nil +} diff --git a/internal/server/main.go b/internal/server/main.go index f004787..3248657 100644 --- a/internal/server/main.go +++ b/internal/server/main.go @@ -51,7 +51,9 @@ func Start(port string) error { app.Post("/api/feeds", api.PostFeed) app.Get("/api/feed/:id", api.GetFeed) app.Get("/api/item/:id", api.GetItem) + app.Post("/api/item/:id/save", api.SaveItem) app.Get("/api/unread", api.GetUnread) + app.Get("/api/saved", api.GetSaved) app.Get("/api/all", api.GetAll) app.Post("/api/read/:id", api.PostRead) app.Post("/api/read", api.PostReadAll) diff --git a/views/index.html b/views/index.html index 1300005..313167e 100644 --- a/views/index.html +++ b/views/index.html @@ -60,6 +60,11 @@ {{feed.Title}} ({{unreadCounts[feed.ID] || '0'}}) +