package handlers 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 EngagementViewRecipe(ctx *gin.Context) { deps := ctx.MustGet("deps").(*domain.InjectedDependencies) recipeId, _ := strconv.Atoi(ctx.Param("id")) // Ensure user is logged in with a valid account user := deps.UserService.GetAuthenicatedUser(ctx) if user == nil { // Log (stale) user out domain.SetCookie(ctx, "jwt_token", "", -1) domain.SetCookie(ctx, "search-filters", "", -1) } if !domain.IsLoggedIn(ctx) || user == nil { if _, err := deps.EngagementService.ViewRecipe(recipeId); err != nil { 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 := deps.EngagementService.UserViewRecipe(user.Id, recipeId); err != nil { 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 EngagementShareRecipe(ctx *gin.Context) { deps := ctx.MustGet("deps").(*domain.InjectedDependencies) recipeId, _ := strconv.Atoi(ctx.Param("id")) // Ensure user is logged in with a valid account user := deps.UserService.GetAuthenicatedUser(ctx) if user == nil { // Log (stale) user out domain.SetCookie(ctx, "jwt_token", "", -1) domain.SetCookie(ctx, "search-filters", "", -1) } if !domain.IsLoggedIn(ctx) || user == nil { if _, err := deps.EngagementService.ShareRecipe(recipeId); err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "status": http.StatusInternalServerError, "message": err.Error(), }) } else { ctx.Status(http.StatusNoContent) } return } if _, err := deps.EngagementService.UserShareRecipe(user.Id, recipeId); err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "status": http.StatusInternalServerError, "message": err.Error(), }) } else { ctx.Status(http.StatusNoContent) } } func EngagementFavoriteRecipe(ctx *gin.Context) { deps := ctx.MustGet("deps").(*domain.InjectedDependencies) // Ensure user is logged in with a valid account user := deps.UserService.GetAuthenicatedUser(ctx) if user == nil { // Log (stale) user out domain.SetCookie(ctx, "jwt_token", "", -1) domain.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 := 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 EngagementMakeRecipe(ctx *gin.Context) { deps := ctx.MustGet("deps").(*domain.InjectedDependencies) // Ensure user is logged in with a valid account user := deps.UserService.GetAuthenicatedUser(ctx) if user == nil { // Log (stale) user out domain.SetCookie(ctx, "jwt_token", "", -1) domain.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 := deps.EngagementService.UserMakeRecipe(user.Id, recipeId); err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "status": http.StatusInternalServerError, "message": err.Error(), }) } else { ctx.Status(http.StatusNoContent) } }