So much progress! Yay!! Whats missing is the global storage of the filters. That is the final touch for searching.
96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
domain "github.com/haydenhargreaves/Potion/internal/domain/recipe"
|
|
)
|
|
|
|
// GetRecipeOfTheWeekHandler fetchs the current recipe of the week and returns it.
|
|
// If an error occurs, it will be returned and a recipe will not be returned.
|
|
//
|
|
// Until auth is reimplemented, there is no way to determine what user is making the
|
|
// call.
|
|
func (s *Server) GetRecipeOfTheWeekHandlerV2(ctx *gin.Context) {
|
|
userId := getUserId(ctx)
|
|
recipe, err := s.deps.RecipeService.GetRecipeOfTheWeek(userId)
|
|
|
|
if err != nil {
|
|
ctx.JSON(http.StatusBadRequest, gin.H{
|
|
"status": http.StatusBadRequest,
|
|
"message": fmt.Sprintf("[ERROR] Failed to get recipe of the week. %s", err.Error()),
|
|
})
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, gin.H{
|
|
"status": http.StatusOK,
|
|
"message": "[OK] Successfully retrieved recipe of the week.",
|
|
"recipe": recipe,
|
|
})
|
|
}
|
|
|
|
func (s *Server) GetRecipeHandlerV2(ctx *gin.Context) {
|
|
id := ctx.Param("id")
|
|
parsedId, err := strconv.Atoi(id)
|
|
if err != nil {
|
|
ctx.JSON(http.StatusBadRequest, gin.H{
|
|
"status": http.StatusBadRequest,
|
|
"message": fmt.Sprintf("[ERROR] Failed to parse ID parameter. %s", err.Error()),
|
|
})
|
|
return
|
|
}
|
|
|
|
userId := getUserId(ctx)
|
|
recipe, err := s.deps.RecipeService.GetRecipe(parsedId, userId)
|
|
if err != nil {
|
|
ctx.JSON(http.StatusBadRequest, gin.H{
|
|
"status": http.StatusBadRequest,
|
|
"message": fmt.Sprintf("[ERROR] Failed to get recipe. %s", err.Error()),
|
|
})
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, gin.H{
|
|
"status": http.StatusOK,
|
|
"message": "[OK] Successfully retrieved recipe.",
|
|
"recipe": recipe,
|
|
})
|
|
}
|
|
|
|
func (s *Server) SearchRecipeHandlerV2(ctx *gin.Context) {
|
|
var filters domain.SearchFilters
|
|
|
|
// Parse filters
|
|
if err := ctx.ShouldBindJSON(&filters); err != nil {
|
|
ctx.JSON(http.StatusBadRequest, gin.H{
|
|
"status": http.StatusBadRequest,
|
|
"message": fmt.Sprintf("[ERROR] Failed to parse filters. %s", err.Error()),
|
|
})
|
|
return
|
|
}
|
|
|
|
// This is optional, so we can do this
|
|
userId := getUserId(ctx)
|
|
|
|
// Did I really have two APIs...?
|
|
// TODO: Fix service at some point, no need to accept the favorites (bool) param
|
|
recipes, err := s.deps.RecipeService.SearchRecipes(filters, userId, filters.Favorites)
|
|
if err != nil {
|
|
ctx.JSON(http.StatusBadRequest, gin.H{
|
|
"status": http.StatusBadRequest,
|
|
"message": fmt.Sprintf("[ERROR] Failed to get searched recipes. %s", err.Error()),
|
|
})
|
|
return
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, gin.H{
|
|
"status": http.StatusOK,
|
|
"message": "[OK] Successfully retrieved recipes based on provided filters.",
|
|
"recipes": recipes,
|
|
})
|
|
}
|