Missing some context storage and better passing of data to allow between the home page to the search page. Need a way to store the search results in state so they can be retrieved when the page is reloaded, etc.
116 lines
2.7 KiB
Go
116 lines
2.7 KiB
Go
package handlers
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
domain "github.com/haydenhargreaves/Potion/internal/domain/server"
|
|
layouts "github.com/haydenhargreaves/Potion/internal/templates/layouts"
|
|
pages "github.com/haydenhargreaves/Potion/internal/templates/pages"
|
|
)
|
|
|
|
func LoginPage(ctx *gin.Context) {
|
|
title := "Potion - Login"
|
|
page := pages.LoginPage()
|
|
|
|
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
|
|
}
|
|
|
|
func HomePage(ctx *gin.Context) {
|
|
title := "Potion - Home"
|
|
page := pages.HomePage()
|
|
|
|
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
|
|
}
|
|
|
|
func FavoritesPage(ctx *gin.Context) {
|
|
title := "Potion - Favorites"
|
|
page := pages.FavoritesPage()
|
|
|
|
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
|
|
}
|
|
|
|
func CreatePage(ctx *gin.Context) {
|
|
// If not logged in, direct to the login page
|
|
if !domain.IsLoggedIn(ctx) {
|
|
ctx.Redirect(http.StatusSeeOther, domain.WEB_LOGIN)
|
|
return
|
|
}
|
|
|
|
title := "Potion - Create"
|
|
page := pages.CreatePage()
|
|
|
|
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
|
|
}
|
|
|
|
func ProfilePage(ctx *gin.Context) {
|
|
// If not logged in, direct to the login page
|
|
if !domain.IsLoggedIn(ctx) {
|
|
ctx.Redirect(http.StatusSeeOther, domain.WEB_LOGIN)
|
|
return
|
|
}
|
|
|
|
// Else, get the user data
|
|
deps := ctx.MustGet("deps").(*domain.InjectedDependencies)
|
|
user := deps.UserService.GetAuthenicatedUser(ctx)
|
|
|
|
title := "Potion - Profile"
|
|
page := pages.ProfilePage(user)
|
|
|
|
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
|
|
}
|
|
|
|
func ListPage(ctx *gin.Context) {
|
|
title := "Potion - Shopping List"
|
|
page := pages.ListPage()
|
|
|
|
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
|
|
}
|
|
|
|
// TODO: Figure out how to handle errors, think we just need a simple display.
|
|
func RecipePage(ctx *gin.Context) {
|
|
// Call recipe service to get via ID
|
|
deps := ctx.MustGet("deps").(*domain.InjectedDependencies)
|
|
id := ctx.Param("id")
|
|
|
|
// Parse ID
|
|
parsed, err := strconv.Atoi(id)
|
|
if err != nil {
|
|
fmt.Printf("ERROR: %s\n", err.Error())
|
|
ctx.JSON(400, err.Error())
|
|
return
|
|
}
|
|
|
|
// Get recipe
|
|
recipe, err := deps.RecipeService.GetRecipe(parsed)
|
|
if err != nil {
|
|
fmt.Printf("ERROR: %s\n", err.Error())
|
|
ctx.JSON(400, err.Error())
|
|
return
|
|
}
|
|
|
|
// Get user
|
|
user, err := deps.UserService.GetUser(recipe.UserId)
|
|
if err != nil {
|
|
fmt.Printf("ERROR: %s\n", err.Error())
|
|
ctx.JSON(400, err.Error())
|
|
return
|
|
}
|
|
|
|
title := "Potion - View Recipe"
|
|
page := pages.RecipePage(*recipe, *user)
|
|
|
|
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
|
|
}
|
|
|
|
func SearchPage(ctx *gin.Context) {
|
|
title := "Potion - Recipe Search"
|
|
page := pages.SearchPage()
|
|
|
|
fmt.Println("I OPENED A PAGE!")
|
|
|
|
ctx.HTML(http.StatusOK, "", layouts.AppLayout(title, page))
|
|
}
|