diff --git a/internal/server/router.go b/internal/server/router.go index d7e481f..68c6e7f 100644 --- a/internal/server/router.go +++ b/internal/server/router.go @@ -3,6 +3,7 @@ package server import ( "CatsOfMastodonBotGo/internal/auth" "CatsOfMastodonBotGo/internal/web/handlers" + "net/http" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" @@ -18,17 +19,32 @@ func SetupRouter() *gin.Engine { AllowCredentials: true, })) + r.LoadHTMLGlob("internal/web/templates/**/*") + auth.InitJwtTokenGenerator() // Must be befor initializing admin handler, otherwise 'panic: runtime error: invalid memory address or nil pointer dereference' handlers.InitAdminDashboardHandler() handlers.InitApiEndpointHandler() + handlers.InitEmbedCardHandler() + + r.GET("/", func(c *gin.Context) { + c.HTML(http.StatusOK, "home/index.html", nil) + }) + r.GET("/embed", handlers.EmbedCardHandlerInstance.GetEmbedCard) admin := r.Group("/admin") // My man, this is done way more efficient and fast in .NET, specially the authentication part - admin.POST("/login", handlers.AdminDashboardHandlerInstance.Login) - admin.GET("/getmedia", auth.JwtTokenGeneratorInstance.GinMiddleware(), handlers.AdminDashboardHandlerInstance.GetMedia) - admin.POST("/approve", auth.JwtTokenGeneratorInstance.GinMiddleware(), handlers.AdminDashboardHandlerInstance.ApproveMedia) - admin.POST("/reject", auth.JwtTokenGeneratorInstance.GinMiddleware(), handlers.AdminDashboardHandlerInstance.RejectMedia) + admin.GET("/", func(c *gin.Context) { + c.HTML(http.StatusOK, "admin/index.html", nil) + }) + admin.GET("/login", func(c *gin.Context) { + c.HTML(http.StatusOK, "admin/login.html", nil) + }) + adminApi := admin.Group("/api") + adminApi.POST("/login", handlers.AdminDashboardHandlerInstance.Login) + adminApi.GET("/getmedia", auth.JwtTokenGeneratorInstance.GinMiddleware(), handlers.AdminDashboardHandlerInstance.GetMedia) + adminApi.POST("/approve", auth.JwtTokenGeneratorInstance.GinMiddleware(), handlers.AdminDashboardHandlerInstance.ApproveMedia) + adminApi.POST("/reject", auth.JwtTokenGeneratorInstance.GinMiddleware(), handlers.AdminDashboardHandlerInstance.RejectMedia) api := r.Group("/api") diff --git a/internal/services/postService.go b/internal/services/postService.go index afe7034..539ae69 100644 --- a/internal/services/postService.go +++ b/internal/services/postService.go @@ -64,7 +64,6 @@ func (ps *PostService) GetExistingAccountIds() []string { return existingAccountIds } - func (*PostService) GetNewPosts(existingPostIds []string, posts []domain.Post) []domain.Post { var newPosts []domain.Post = nil for _, post := range posts { @@ -108,7 +107,8 @@ func (ps *PostService) GetRandomPost() domain.Post { var post domain.Post ps.db. Preload("Account"). - Preload("Attachments", "approved = ?", true). + Preload("Attachments", "Approved = ?", true). + Where("exists (select 1 from media_attachments where post_id = posts.id and approved = ?)", true). Order("RANDOM()"). First(&post) if len(post.Attachments) > 0 { @@ -140,7 +140,6 @@ func (ps *PostService) GetMedia() domain.MediaAttachment { return media } - func arrayContains(arr []string, str string) bool { for _, a := range arr { if a == str { diff --git a/internal/web/handlers/embedCard.go b/internal/web/handlers/embedCard.go new file mode 100644 index 0000000..992828f --- /dev/null +++ b/internal/web/handlers/embedCard.go @@ -0,0 +1,27 @@ +package handlers + +import ( + "CatsOfMastodonBotGo/internal/services" + + "github.com/gin-gonic/gin" +) + +type EmbedCardHandler struct { + PostService services.PostService +} + +var EmbedCardHandlerInstance *EmbedCardHandler + +func InitEmbedCardHandler() { + EmbedCardHandlerInstance = &EmbedCardHandler{ + PostService: *services.PostServiceInstance, + } +} + +func (ps *EmbedCardHandler) GetEmbedCard(c *gin.Context) { + post := ps.PostService.GetRandomPost() + c.HTML(200, "home/embed.html", gin.H{ + "postUrl": post.Url, + "imageUrl": post.Attachments[0].PreviewUrl, + }) +} diff --git a/internal/web/templates/admin/index.html b/internal/web/templates/admin/index.html new file mode 100644 index 0000000..7066665 --- /dev/null +++ b/internal/web/templates/admin/index.html @@ -0,0 +1,156 @@ +{{ define "admin/index.html" }} + + +
+