diff --git a/internal/handlers/api/apiEndpoint.go b/internal/handlers/api/apiEndpoint.go new file mode 100644 index 0000000..9d79a23 --- /dev/null +++ b/internal/handlers/api/apiEndpoint.go @@ -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(), + }) +} \ No newline at end of file diff --git a/internal/server/router.go b/internal/server/router.go index 2ee0640..c5ed971 100644 --- a/internal/server/router.go +++ b/internal/server/router.go @@ -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) diff --git a/internal/services/postService.go b/internal/services/postService.go index 23389fe..6ad7697 100644 --- a/internal/services/postService.go +++ b/internal/services/postService.go @@ -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 }