149 lines
4.2 KiB
Go
149 lines
4.2 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 {
|
|
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 := 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 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 {
|
|
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 := 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 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 {
|
|
components.RenderErrorBanner(ctx, err.Error())
|
|
ctx.JSON(http.StatusInternalServerError, gin.H{
|
|
"status": http.StatusInternalServerError,
|
|
"message": err.Error(),
|
|
})
|
|
} else {
|
|
ctx.Status(http.StatusNoContent)
|
|
}
|
|
}
|