From aa0405ee98c45a9bb25dd9959d899bbd56bc1b02 Mon Sep 17 00:00:00 2001 From: Bobby Date: Fri, 18 Jul 2025 17:07:23 +0530 Subject: =?UTF-8?q?favourite=20system=20and=20=E2=88=82etails=20on=20singl?= =?UTF-8?q?e=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/posts.go | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) (limited to 'controllers') diff --git a/controllers/posts.go b/controllers/posts.go index 11525b8..41bbc86 100644 --- a/controllers/posts.go +++ b/controllers/posts.go @@ -299,9 +299,51 @@ func PostsSinglePostPageController(ctx *fiber.Ctx) error { return renderSinglePostError(ctx, "Failed to retrieve post. "+err.Error(), fiber.StatusInternalServerError) } + currentUser := auth.GetCurrentUser(ctx) + isUserFavourited := false + if currentUser != nil { + isUserFavourited = post.IsUserFavourited(database.DB, currentUser) + } + ctx.Locals("Title", config.PT_POST_SINGLE+" #"+format.Int64ToString(int64(post.ID))) return shortcuts.Render(ctx, config.TEMPLATE_POST_SINGLE, fiber.Map{ - "Post": post, - "CDNURL": format.GetCDNURL(), + "Post": post, + "CDNURL": format.GetCDNURL(), + "IsUserFavourited": isUserFavourited, }) } + +func PostsSinglePostFavouriteController(ctx *fiber.Ctx) error { + if !auth.IsAuthenticated(ctx) { + return ctx.Redirect(auth.GetLoginURLWithNextField(ctx), fiber.StatusFound) + } + + postID := ctx.Params("id") + if postID == "" { + return renderSinglePostError(ctx, "Post ID is required", fiber.StatusBadRequest) + } + + uintPostID, err := format.StringToUint(postID) + if err != nil { + return renderSinglePostError(ctx, "Invalid Post ID", fiber.StatusBadRequest) + } + + post, err := database.GetPostByID(uintPostID) + if err != nil { + if err.Error() == "record not found" { + return renderSinglePostError(ctx, "Post not found", fiber.StatusNotFound) + } + return renderSinglePostError(ctx, "Failed to retrieve post. "+err.Error(), fiber.StatusInternalServerError) + } + + currentUser := auth.GetCurrentUser(ctx) + if currentUser == nil { + return renderSinglePostError(ctx, "User not found", fiber.StatusUnauthorized) + } + + if err := post.ToggleFavourite(database.DB, currentUser); err != nil { + return renderSinglePostError(ctx, "Failed to toggle favourite. "+err.Error(), fiber.StatusInternalServerError) + } + + return ctx.Redirect("/posts/" + postID) +} -- cgit v1.2.3