Add API endpoint for random post with preloaded relationships
This commit is contained in:
22
internal/handlers/api/apiEndpoint.go
Normal file
22
internal/handlers/api/apiEndpoint.go
Normal 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(),
|
||||||
|
})
|
||||||
|
}
|
@@ -4,6 +4,7 @@ import (
|
|||||||
"CatsOfMastodonBotGo/internal"
|
"CatsOfMastodonBotGo/internal"
|
||||||
handlers_admin "CatsOfMastodonBotGo/internal/handlers/admin"
|
handlers_admin "CatsOfMastodonBotGo/internal/handlers/admin"
|
||||||
handlers_home "CatsOfMastodonBotGo/internal/handlers/home"
|
handlers_home "CatsOfMastodonBotGo/internal/handlers/home"
|
||||||
|
handlers_api "CatsOfMastodonBotGo/internal/handlers/api"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
@@ -13,6 +14,7 @@ func SetupRouter(r *gin.Engine, appContext *internal.AppContext) *gin.Engine {
|
|||||||
|
|
||||||
adminDashboardHandler := handlers_admin.NewAdminDashboardHandler(appContext)
|
adminDashboardHandler := handlers_admin.NewAdminDashboardHandler(appContext)
|
||||||
homePageHandler := handlers_home.NewMainPageHandler(appContext)
|
homePageHandler := handlers_home.NewMainPageHandler(appContext)
|
||||||
|
apiHandler := handlers_api.NewApiEndpointHandler(appContext)
|
||||||
|
|
||||||
admin := r.Group("/admin")
|
admin := r.Group("/admin")
|
||||||
|
|
||||||
@@ -20,6 +22,9 @@ admin := r.Group("/admin")
|
|||||||
admin.POST("/approve", adminDashboardHandler.ApproveMedia)
|
admin.POST("/approve", adminDashboardHandler.ApproveMedia)
|
||||||
admin.POST("/reject", adminDashboardHandler.RejectMedia)
|
admin.POST("/reject", adminDashboardHandler.RejectMedia)
|
||||||
|
|
||||||
|
api := r.Group("/api")
|
||||||
|
|
||||||
|
api.GET("/post/random", apiHandler.GetRandomPost)
|
||||||
|
|
||||||
r.GET("/", homePageHandler.HomePageHandler)
|
r.GET("/", homePageHandler.HomePageHandler)
|
||||||
|
|
||||||
|
@@ -90,7 +90,11 @@ func (ps *PostService) InsertNewAccounts(newAccounts []models.Account) int {
|
|||||||
|
|
||||||
func (ps *PostService) GetRandomPost() models.Post {
|
func (ps *PostService) GetRandomPost() models.Post {
|
||||||
var post 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
|
return post
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user