From bd06deffa4fe8e4ba9b2dc698c9fdc05c3875cf6 Mon Sep 17 00:00:00 2001
From: Kyle Zarazan <zarazan@no-reply.github.com>
Date: Tue, 26 Nov 2024 13:39:56 -0700
Subject: [PATCH] error handling

---
 app/controllers/recipes_controller.rb | 3 ++-
 app/javascript/store/recipesSlice.ts  | 2 +-
 app/models/food.rb                    | 2 ++
 app/models/recipe.rb                  | 2 ++
 4 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/app/controllers/recipes_controller.rb b/app/controllers/recipes_controller.rb
index 1cb00fd..36e5b30 100644
--- a/app/controllers/recipes_controller.rb
+++ b/app/controllers/recipes_controller.rb
@@ -38,7 +38,8 @@ def recipe_params
     rp[:ingredients_attributes].each do |ingredient|
       food_name = ingredient.delete(:food_name)
       if ingredient[:food_id].blank? || ingredient[:food_id] == 0
-        ingredient[:food_id] = Food.find_or_create_by!(name: food_name).id
+        new_food = Food.new(name: food_name)
+        ingredient[:food_id] = new_food.id if new_food.save
       end
     end
     rp
diff --git a/app/javascript/store/recipesSlice.ts b/app/javascript/store/recipesSlice.ts
index ba535f0..812c9da 100644
--- a/app/javascript/store/recipesSlice.ts
+++ b/app/javascript/store/recipesSlice.ts
@@ -24,7 +24,7 @@ export const createRecipe = createAsyncThunk(
 
     if (!response.ok) {
       const errorData = await response.json();
-      throw new Error(errorData.error || 'An error occurred');
+      throw new Error(errorData.errors || 'Unknown error');
     }
     
     return response.json();
diff --git a/app/models/food.rb b/app/models/food.rb
index acd99a8..b342b6c 100644
--- a/app/models/food.rb
+++ b/app/models/food.rb
@@ -1,3 +1,5 @@
 class Food < ApplicationRecord
   has_many :ingredients
+
+  validates :name, presence: true, uniqueness: true
 end
diff --git a/app/models/recipe.rb b/app/models/recipe.rb
index ea8a096..cd2c5a3 100644
--- a/app/models/recipe.rb
+++ b/app/models/recipe.rb
@@ -3,6 +3,8 @@ class Recipe < ApplicationRecord
 
   accepts_nested_attributes_for :ingredients, allow_destroy: true
 
+  validates :name, presence: true
+
   after_save :broadcast_recipe
 
   def to_json