diff --git a/internal/app/handlers/auth_handler.go b/internal/app/handlers/auth_handler.go
index 2da9eff..ebdf7bc 100644
--- a/internal/app/handlers/auth_handler.go
+++ b/internal/app/handlers/auth_handler.go
@@ -61,5 +61,7 @@ func GoogleCallback(ctx *gin.Context) {
func Logout(ctx *gin.Context) {
// TODO: Use same values as the GoogleCallback function
ctx.SetCookie("jwt_token", "", -1, "/", "", false, true) // TODO: Update settings
+ ctx.SetCookie("search-filters", "", -1, "/", "", false, true)
+
ctx.Redirect(http.StatusSeeOther, domain.WEB_HOME)
}
diff --git a/internal/app/handlers/page_handler.go b/internal/app/handlers/page_handler.go
index e9e0f7a..cf90ba2 100644
--- a/internal/app/handlers/page_handler.go
+++ b/internal/app/handlers/page_handler.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"net/http"
+ "os"
"strconv"
"github.com/a-h/templ"
@@ -82,19 +83,6 @@ func FavoritesPage(ctx *gin.Context) {
}
}
- // Else, get the user's favorites
- // BUG: Depreciated, not displaying a list, using search to drive this page as well
- // deps := ctx.MustGet("deps").(*domainServer.InjectedDependencies)
- // userId := ctx.MustGet("userId").(int)
- // recipes, err := deps.RecipeService.GetUserFavoriteRecipes(userId)
- // if err != nil {
- // ctx.JSON(http.StatusInternalServerError, gin.H{
- // "status": http.StatusInternalServerError,
- // "message": fmt.Sprintf("Error getting favorites. %s\n", err.Error()),
- // })
- // return
- // }
-
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
}
@@ -200,24 +188,8 @@ func RecipePage(ctx *gin.Context) {
return
}
- // Add engagement
- // BUG: Don't want to do this here
- // if loggedIn {
- // if _, err = deps.EngagementService.UserViewRecipe(*userId, recipe.Id); err != nil {
- // fmt.Printf("ERROR: %s\n", err.Error())
- // ctx.JSON(400, err.Error())
- // return
- // }
- // } else {
- // if _, err = deps.EngagementService.ViewRecipe(recipe.Id); err != nil {
- // fmt.Printf("ERROR: %s\n", err.Error())
- // ctx.JSON(400, err.Error())
- // return
- // }
- // }
-
title := "Potion - View Recipe"
- page := pages.RecipePage(*recipe, *user, loggedIn)
+ page := pages.RecipePage(*recipe, *user, loggedIn, os.Getenv("DOMAIN"))
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
}
diff --git a/internal/app/handlers/recipe_handler.go b/internal/app/handlers/recipe_handler.go
index a37ffc2..681e36f 100644
--- a/internal/app/handlers/recipe_handler.go
+++ b/internal/app/handlers/recipe_handler.go
@@ -121,6 +121,10 @@ func SearchRecipesFavorites(ctx *gin.Context) {
// TODO: Error here if they're not logged in?
// Get user data (they should be logged in)
+ if !domain.IsLoggedIn(ctx) {
+ ctx.JSON(http.StatusOK, gin.H{"error": "User is not logged in. User will be nil."})
+ }
+
userId := ctx.MustGet("userId").(int)
recipes, err := deps.RecipeService.SearchRecipes(filters, &userId, true)
diff --git a/internal/app/server/server.go b/internal/app/server/server.go
index 9863e17..a921e6d 100644
--- a/internal/app/server/server.go
+++ b/internal/app/server/server.go
@@ -188,22 +188,6 @@ func (s *Server) Setup() *Server {
router_api.GET("/user/recipes", handlers.GetUserRecipes)
router_api.GET("/user/favorites", handlers.GetUserFavoriteRecipes)
- router_api.GET("/user/temp", func(ctx *gin.Context) {
- recipes, err := recipeService.GetUserMadeRecipes(3, 6)
-
- if err != nil {
- ctx.JSON(http.StatusBadRequest, gin.H{
- "recipes": recipes,
- "error": err.Error(),
- })
- } else {
- ctx.JSON(http.StatusBadRequest, gin.H{
- "recipes": recipes,
- "error": "",
- })
- }
- })
-
// Engagement endpoints
router_api.POST("/engagement/view/:id", handlers.EngagementViewRecipe)
router_api.POST("/engagement/share/:id", handlers.EngagementShareRecipe)
diff --git a/internal/infrastructure/database/repository/user_repository.go b/internal/infrastructure/database/repository/user_repository.go
index 1bf0b97..b593d3d 100644
--- a/internal/infrastructure/database/repository/user_repository.go
+++ b/internal/infrastructure/database/repository/user_repository.go
@@ -2,6 +2,7 @@ package repository
import (
"database/sql"
+ "fmt"
domain "github.com/haydenhargreaves/Potion/internal/domain/user"
_ "github.com/lib/pq"
@@ -35,6 +36,10 @@ func (r *UserRepository) CreateGoogleUser(googleUserInfo *domain.GoogleUserInfo,
return domain.User{}, err
}
+ if googleUserInfo == nil {
+ return domain.User{}, fmt.Errorf("Google user info provided was nil")
+ }
+
var user domain.User
query := `INSERT INTO users
(GoogleId, Name, Email, ImageUrl, GoogleRefreshToken)
diff --git a/internal/templates/components/navbar_templ.go b/internal/templates/components/navbar_templ.go
index 0ae98db..9a3c7c2 100644
--- a/internal/templates/components/navbar_templ.go
+++ b/internal/templates/components/navbar_templ.go
@@ -211,7 +211,7 @@ func Navbar(current string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\">
Potion
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\">
Potion
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/internal/templates/pages/favorites.templ b/internal/templates/pages/favorites.templ
index 230931c..7ddc99e 100644
--- a/internal/templates/pages/favorites.templ
+++ b/internal/templates/pages/favorites.templ
@@ -6,68 +6,73 @@ import "github.com/haydenhargreaves/Potion/internal/domain/recipe"
import domainServer "github.com/haydenhargreaves/Potion/internal/domain/server"
templ FavoriteList(recipes []domain.Recipe) {
-
- for _, recipe := range recipes {
- @favoriteResult(recipe)
- }
- if len(recipes) == 0 || recipes == nil {
-
No results
- } else {
-
End of results
- }
-
+
+ for _, recipe := range recipes {
+ @favoriteResult(recipe)
+ }
+ if len(recipes) == 0 || recipes == nil {
+
No results
+ } else {
+
End of results
+ }
+
}
templ favoriteResult(recipe domain.Recipe) {
-
-
![]()
-
-
-
-
- { recipe.Title } { recipe.Category }
-
-
-
- @timeIconSm()
- { recipe.Duration.Total } min
-
-
- for _ = range(recipe.Difficulty) {
- @starIconSm(true)
- }
- for _ = range(5 - recipe.Difficulty) {
- @starIconSm(false)
- }
-
-
- @servingIconSm()
- Serves { recipe.Serves }
-
-
-
-
-
-
{ recipe.Description }
-
-
+
+
![]()
+
+
+
+
+ { recipe.Title } { recipe.Category }
+
+
+
+ @timeIconSm()
+ { recipe.Duration.Total } min
+
+
+ for _ = range(recipe.Difficulty) {
+ @starIconSm(true)
+ }
+ for _ = range(5 - recipe.Difficulty) {
+ @starIconSm(false)
+ }
+
+
+ @servingIconSm()
+ Serves { recipe.Serves }
+
+
+
+
+
+
{ recipe.Description }
+
+
}
templ FavoritesPage(filters domain.SearchFilters) {
-@components.Navbar("favorites")
-
-
- @components.BannerText("Favorites")
- @components.SearchBar(filters, false, true, true)
-
- @FavoriteList(nil)
-
-
+ @components.Navbar("favorites")
+
+
+ @components.BannerText("Favorites")
+ @components.SearchBar(filters, false, true, true)
+
+ @FavoriteList(nil)
+
+
}
diff --git a/internal/templates/pages/favorites_templ.go b/internal/templates/pages/favorites_templ.go
index 7f56398..790cfd8 100644
--- a/internal/templates/pages/favorites_templ.go
+++ b/internal/templates/pages/favorites_templ.go
@@ -91,7 +91,7 @@ func favoriteResult(recipe domain.Recipe) templ.Component {
var templ_7745c5c3_Var3 string
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf(domainServer.API_ENGAGEMENT_VIEW, recipe.Id))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 22, Col: 71}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 23, Col: 68}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
if templ_7745c5c3_Err != nil {
@@ -104,7 +104,7 @@ func favoriteResult(recipe domain.Recipe) templ.Component {
var templ_7745c5c3_Var4 string
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(recipe.Title)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 29, Col: 24}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 33, Col: 20}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
if templ_7745c5c3_Err != nil {
@@ -117,7 +117,7 @@ func favoriteResult(recipe domain.Recipe) templ.Component {
var templ_7745c5c3_Var5 string
templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(recipe.Category)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 29, Col: 95}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 33, Col: 91}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
if templ_7745c5c3_Err != nil {
@@ -134,7 +134,7 @@ func favoriteResult(recipe domain.Recipe) templ.Component {
var templ_7745c5c3_Var6 string
templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(recipe.Duration.Total)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 34, Col: 35}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 38, Col: 30}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
if templ_7745c5c3_Err != nil {
@@ -171,7 +171,7 @@ func favoriteResult(recipe domain.Recipe) templ.Component {
var templ_7745c5c3_Var7 string
templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(recipe.Serves)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 46, Col: 34}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 50, Col: 29}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
if templ_7745c5c3_Err != nil {
@@ -184,7 +184,7 @@ func favoriteResult(recipe domain.Recipe) templ.Component {
var templ_7745c5c3_Var8 string
templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(recipe.Description)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 58, Col: 73}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/favorites.templ`, Line: 63, Col: 72}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
if templ_7745c5c3_Err != nil {
diff --git a/internal/templates/pages/recipe.templ b/internal/templates/pages/recipe.templ
index 3f4a99f..44b6b8c 100644
--- a/internal/templates/pages/recipe.templ
+++ b/internal/templates/pages/recipe.templ
@@ -291,7 +291,7 @@ templ buttonSection(favorited bool, id int, loggedIn bool) {
}
-templ RecipePage(recipe domain.Recipe, user domainUser.User, loggedIn bool) {
+templ RecipePage(recipe domain.Recipe, user domainUser.User, loggedIn bool, domain string) {
@components.Navbar("")
@@ -312,10 +312,10 @@ templ RecipePage(recipe domain.Recipe, user domainUser.User, loggedIn bool) {
@tagList(recipe.Tags, recipe.Created, recipe.Modified)
- @scripts(recipe.Id)
+ @scripts(recipe.Id, domain)
}
-templ scripts(id int) {
+templ scripts(id int, domain string) {
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "/v1/web/recipe/")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Var36, templ_7745c5c3_Err := templruntime.ScriptContentInsideStringLiteral(id)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/templates/pages/recipe.templ`, Line: 326, Col: 51}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var36)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\"\n navigator.clipboard.writeText(url).then(() => {\n button.outerHTML = `\n
\n `;\n\n setTimeout(() => {\n const newButton = document.getElementById(\"share-button\");\n newButton.outerHTML = before;\n }, 2000);\n });\n } else {\n console.warn(\"Clipboard API not available.\");\n\n button.outerHTML = `\n
\n `;\n\n setTimeout(() => {\n const newButton = document.getElementById(\"share-button\");\n newButton.outerHTML = before;\n }, 2000);\n }\n }\n\n function makeButtonHandler() {\n const button = document.getElementById(\"make-button\");\n\n button.outerHTML = `\n
\n `;\n }\n\n function favoriteButtonHandler() {\n const button = document.getElementById(\"favorite-button\");\n\n console.log(button.classList);\n console.log(button.classList.contains(\"border-blue-300\"));\n\n const toggleClasses = [\n \"border-gray-300\", \"hover:bg-gray-50\", \"hover:border-blue-300\",\n \"border-blue-300\", \"bg-blue-50\", \"hover:bg-blue-100\", \"hover:border-blue-500\"\n ];\n\n for (const cls of toggleClasses) {\n console.log(\"toggling class \" + cls);\n button.classList.toggle(cls);\n }\n\n if (!button.classList.contains(\"border-blue-300\")) {\n button.innerHTML = `\n
\n Favorite\n `;\n\n } else {\n button.innerHTML = `\n
\n Unfavorite\n `;\n }\n\n }\n\n")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}