✨ 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