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, }) }