This is found in the components domain. Make sure only HTMX routes call it. Although, I think I put this into the page handlers WHICH IS WRONG. However, it does work, ish. But it does not load into the DOM properly. But it seems to display just fine.
144 lines
4.0 KiB
Go
144 lines
4.0 KiB
Go
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)
|
|
}
|
|
}
|