✨ News getter api
This commit is contained in:
		@@ -3,7 +3,7 @@ package api
 | 
			
		||||
import (
 | 
			
		||||
	"git.solsynth.dev/hypernet/nexus/pkg/nex/sec"
 | 
			
		||||
	"git.solsynth.dev/hypernet/reader/pkg/internal/services"
 | 
			
		||||
	"github.com/gofiber/fiber"
 | 
			
		||||
	"github.com/gofiber/fiber/v2"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func adminTriggerScanTask(c *fiber.Ctx) error {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,12 +8,19 @@ import (
 | 
			
		||||
func MapAPIs(app *fiber.App, baseURL string) {
 | 
			
		||||
	api := app.Group(baseURL).Name("API")
 | 
			
		||||
	{
 | 
			
		||||
		api.Get("/well-known/sources", getNewsSources)
 | 
			
		||||
 | 
			
		||||
		admin := api.Group("/admin").Name("Admin")
 | 
			
		||||
		{
 | 
			
		||||
			admin.Post("/scan", sec.ValidatorMiddleware, adminTriggerScanTask)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		api.Get("/well-known/sources", getNewsSources)
 | 
			
		||||
		api.Get("/link/*", getLinkMeta)
 | 
			
		||||
 | 
			
		||||
		news := api.Group("/news").Name("News")
 | 
			
		||||
		{
 | 
			
		||||
			news.Get("/", listNewsArticles)
 | 
			
		||||
			news.Get("/:hash", getNewsArticle)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								pkg/internal/server/api/news_api.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								pkg/internal/server/api/news_api.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
package api
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"git.solsynth.dev/hypernet/reader/pkg/internal/database"
 | 
			
		||||
	"git.solsynth.dev/hypernet/reader/pkg/internal/models"
 | 
			
		||||
	"github.com/gofiber/fiber/v2"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func listNewsArticles(c *fiber.Ctx) error {
 | 
			
		||||
	take := c.QueryInt("take", 0)
 | 
			
		||||
	offset := c.QueryInt("offset", 0)
 | 
			
		||||
 | 
			
		||||
	var count int64
 | 
			
		||||
	if err := database.C.Model(&models.NewsArticle{}).Count(&count).Error; err != nil {
 | 
			
		||||
		return fiber.NewError(fiber.StatusInternalServerError, err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var articles []models.NewsArticle
 | 
			
		||||
	if err := database.C.Limit(take).Offset(offset).Omit("Content").Find(&articles).Error; err != nil {
 | 
			
		||||
		return fiber.NewError(fiber.StatusInternalServerError, err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return c.JSON(fiber.Map{
 | 
			
		||||
		"count": count,
 | 
			
		||||
		"data":  articles,
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getNewsArticle(c *fiber.Ctx) error {
 | 
			
		||||
	hash := c.Params("hash")
 | 
			
		||||
 | 
			
		||||
	var article models.NewsArticle
 | 
			
		||||
	if err := database.C.Where("hash = ?", hash).First(&article).Error; err != nil {
 | 
			
		||||
		return fiber.NewError(fiber.StatusNotFound, err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return c.JSON(article)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user