Potion/internal/app/server/engagement_handler.go
Hayden Hargreaves aad4640527 (REFACTOR): Working on dependency injection.
However, everything seems really slow now... 950ms for a page request?
Something is wrong, just not sure what yet.
2025-09-04 21:51:16 -07:00

143 lines
4.0 KiB
Go

package server
import (
"fmt"
"net/http"
"strconv"
"github.com/gin-gonic/gin"
domain "github.com/haydenhargreaves/Potion/internal/domain/server"
"github.com/haydenhargreaves/Potion/internal/templates/components"
)
func (s *Server) EngagementViewRecipeHandler(ctx *gin.Context) {
recipeId, _ := strconv.Atoi(ctx.Param("id"))
// Ensure user is logged in with a valid account
user := s.deps.UserService.GetAuthenicatedUser(ctx)
if user == nil {
// Log (stale) user out
s.SetCookie(ctx, "jwt_token", "", -1)
s.SetCookie(ctx, "search-filters", "", -1)
}
if !domain.IsLoggedIn(ctx) || user == nil {
if _, err := s.deps.EngagementService.ViewRecipe(recipeId); err != nil {
components.RenderErrorBanner(ctx, err.Error())
ctx.JSON(http.StatusInternalServerError, gin.H{
"status": http.StatusInternalServerError,
"message": err.Error(),
})
} else {
ctx.Header("HX-Redirect", fmt.Sprintf(domain.WEB_RECIPE, recipeId))
ctx.Status(http.StatusOK)
}
return
}
// We caught nil already, we can assume the user exists
if _, err := s.deps.EngagementService.UserViewRecipe(user.Id, recipeId); err != nil {
components.RenderErrorBanner(ctx, err.Error())
ctx.JSON(http.StatusInternalServerError, gin.H{
"status": http.StatusInternalServerError,
"message": err.Error(),
})
} else {
ctx.Header("HX-Redirect", fmt.Sprintf(domain.WEB_RECIPE, recipeId))
ctx.Status(http.StatusOK)
}
}
func (s *Server) EngagementShareRecipeHandler(ctx *gin.Context) {
recipeId, _ := strconv.Atoi(ctx.Param("id"))
// Ensure user is logged in with a valid account
user := s.deps.UserService.GetAuthenicatedUser(ctx)
if user == nil {
// Log (stale) user out
s.SetCookie(ctx, "jwt_token", "", -1)
s.SetCookie(ctx, "search-filters", "", -1)
}
if !domain.IsLoggedIn(ctx) || user == nil {
if _, err := s.deps.EngagementService.ShareRecipe(recipeId); err != nil {
components.RenderErrorBanner(ctx, err.Error())
ctx.JSON(http.StatusInternalServerError, gin.H{
"status": http.StatusInternalServerError,
"message": err.Error(),
})
} else {
ctx.Status(http.StatusNoContent)
}
return
}
if _, err := s.deps.EngagementService.UserShareRecipe(user.Id, recipeId); err != nil {
components.RenderErrorBanner(ctx, err.Error())
ctx.JSON(http.StatusInternalServerError, gin.H{
"status": http.StatusInternalServerError,
"message": err.Error(),
})
} else {
ctx.Status(http.StatusNoContent)
}
}
func (s *Server) EngagementFavoriteRecipeHandler(ctx *gin.Context) {
// Ensure user is logged in with a valid account
user := s.deps.UserService.GetAuthenicatedUser(ctx)
if user == nil {
// Log (stale) user out
s.SetCookie(ctx, "jwt_token", "", -1)
s.SetCookie(ctx, "search-filters", "", -1)
}
if !domain.IsLoggedIn(ctx) || user == nil {
ctx.Header("HX-Redirect", domain.WEB_LOGIN)
ctx.Status(http.StatusOK)
return
}
id := ctx.Param("id")
recipeId, _ := strconv.Atoi(id)
if _, err := s.deps.EngagementService.UserFavoriteRecipe(user.Id, recipeId); err != nil {
components.RenderErrorBanner(ctx, fmt.Sprintf("Something went wrong. %s.", err.Error()))
ctx.JSON(http.StatusInternalServerError, gin.H{
"status": http.StatusInternalServerError,
"message": err.Error(),
})
} else {
ctx.Status(http.StatusNoContent)
}
}
func (s *Server) EngagementMakeRecipeHandler(ctx *gin.Context) {
// Ensure user is logged in with a valid account
user := s.deps.UserService.GetAuthenicatedUser(ctx)
if user == nil {
// Log (stale) user out
s.SetCookie(ctx, "jwt_token", "", -1)
s.SetCookie(ctx, "search-filters", "", -1)
}
if !domain.IsLoggedIn(ctx) || user == nil {
ctx.Header("HX-Redirect", domain.WEB_LOGIN)
ctx.Status(http.StatusOK)
return
}
id := ctx.Param("id")
recipeId, _ := strconv.Atoi(id)
if _, err := s.deps.EngagementService.UserMakeRecipe(user.Id, recipeId); err != nil {
components.RenderErrorBanner(ctx, err.Error())
ctx.JSON(http.StatusInternalServerError, gin.H{
"status": http.StatusInternalServerError,
"message": err.Error(),
})
} else {
ctx.Status(http.StatusNoContent)
}
}