diff --git a/pkg/internal/server/api/index.go b/pkg/internal/server/api/index.go index 76abad1..e451280 100644 --- a/pkg/internal/server/api/index.go +++ b/pkg/internal/server/api/index.go @@ -19,6 +19,7 @@ func MapAPIs(app *fiber.App, baseURL string) { news := api.Group("/news").Name("News") { + news.Get("/today", getTodayNews) news.Get("/", listNewsArticles) news.Get("/:hash", getNewsArticle) } diff --git a/pkg/internal/server/api/news_api.go b/pkg/internal/server/api/news_api.go index f169988..6b29a05 100644 --- a/pkg/internal/server/api/news_api.go +++ b/pkg/internal/server/api/news_api.go @@ -1,11 +1,37 @@ package api import ( + "time" + "git.solsynth.dev/hypernet/reader/pkg/internal/database" "git.solsynth.dev/hypernet/reader/pkg/internal/models" "github.com/gofiber/fiber/v2" ) +func getTodayNews(c *fiber.Ctx) error { + tx := database.C + today := time.Now().Format("2006-01-02") + tx = tx.Where("DATE(COALESCE(published_at, created_at)) = ?", today) + + var count int64 + countTx := tx + if err := countTx.Model(&models.NewsArticle{}).Count(&count).Error; err != nil { + return fiber.NewError(fiber.StatusInternalServerError, err.Error()) + } + + var article models.NewsArticle + if err := tx. + Omit("Content").Order("COALESCE(published_at, created_at) DESC"). + First(&article).Error; err != nil { + return fiber.NewError(fiber.StatusInternalServerError, err.Error()) + } + + return c.JSON(fiber.Map{ + "count": count, + "data": article, + }) +} + func listNewsArticles(c *fiber.Ctx) error { take := c.QueryInt("take", 0) offset := c.QueryInt("offset", 0)