Add API endpoint for random post with preloaded relationships

This commit is contained in:
2025-05-14 20:11:25 +03:30
parent 943925c3e9
commit b30f0d2726
3 changed files with 32 additions and 1 deletions

View File

@@ -0,0 +1,22 @@
package handlers_api
import (
"CatsOfMastodonBotGo/internal"
"github.com/gin-gonic/gin"
)
type ApiEndpointHandler struct {
AppContext *internal.AppContext
}
func NewApiEndpointHandler(appContext *internal.AppContext) *ApiEndpointHandler {
return &ApiEndpointHandler{
AppContext: appContext,
}
}
func (appContext *ApiEndpointHandler) GetRandomPost(c *gin.Context) {
c.JSON(200, gin.H{
"post": appContext.AppContext.PostService.GetRandomPost(),
})
}

View File

@@ -4,6 +4,7 @@ import (
"CatsOfMastodonBotGo/internal"
handlers_admin "CatsOfMastodonBotGo/internal/handlers/admin"
handlers_home "CatsOfMastodonBotGo/internal/handlers/home"
handlers_api "CatsOfMastodonBotGo/internal/handlers/api"
"github.com/gin-gonic/gin"
)
@@ -13,6 +14,7 @@ func SetupRouter(r *gin.Engine, appContext *internal.AppContext) *gin.Engine {
adminDashboardHandler := handlers_admin.NewAdminDashboardHandler(appContext)
homePageHandler := handlers_home.NewMainPageHandler(appContext)
apiHandler := handlers_api.NewApiEndpointHandler(appContext)
admin := r.Group("/admin")
@@ -20,6 +22,9 @@ admin := r.Group("/admin")
admin.POST("/approve", adminDashboardHandler.ApproveMedia)
admin.POST("/reject", adminDashboardHandler.RejectMedia)
api := r.Group("/api")
api.GET("/post/random", apiHandler.GetRandomPost)
r.GET("/", homePageHandler.HomePageHandler)

View File

@@ -90,7 +90,11 @@ func (ps *PostService) InsertNewAccounts(newAccounts []models.Account) int {
func (ps *PostService) GetRandomPost() models.Post {
var post models.Post
ps.db.Order("RANDOM()").First(&post) // TODO: only approved posts
ps.db.
Preload("Account").
Preload("Attachments").
Order("RANDOM()").
First(&post)
return post
}