From f66b0f6a1e5447bbe7bf465300a89e3e7f475db4 Mon Sep 17 00:00:00 2001 From: Stepan Date: Mon, 30 Jun 2025 21:51:00 +0200 Subject: [PATCH 1/3] Added FavoriteModel on db and created new endpoint for ajax --- apps/Ajax/ajax-actions.php | 55 ++++++++++++++++++++++++++- apps/Recipes/Models/FavoriteModel.php | 47 +++++++++++++++++++++++ 2 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 apps/Recipes/Models/FavoriteModel.php diff --git a/apps/Ajax/ajax-actions.php b/apps/Ajax/ajax-actions.php index 15945d5..3834500 100644 --- a/apps/Ajax/ajax-actions.php +++ b/apps/Ajax/ajax-actions.php @@ -3,7 +3,8 @@ use Lycoreco\Apps\Recipes\Models\{ IngredientModel, RecipeModel, - RecipeUserMenu + RecipeUserMenu, + FavoriteModel }; function get_ajax_error($message, $error_code = 500) @@ -133,5 +134,57 @@ function ajax_search_ingredient() $result['count'] = count($ingredients); $result['result'] = $ingredients; + return $result; +} + +function ajax_favorites() +{ + $recipe_id = $_POST['recipe_id'] ?? null; + $type = $_POST['type'] ?? 'add'; // add, remove + + if (!CURRENT_USER) { + return get_ajax_error('You are not authorized', 401); + } + if (!isset($recipe_id)) { + return get_ajax_error("Missing 'recipe_id' parameter.", 400); + } + if($type != 'add' && $type != 'remove') + { + return get_ajax_error("'type' parameter can be only 'add' or 'remove'", 400); + } + $result = array(); + + $favorite = FavoriteModel::get(array( + [ + 'name' => 'obj.recipe_id', + 'type' => '=', + 'value' => $recipe_id + ], + [ + 'name' => 'obj.user_id', + 'type' => '=', + 'value' => CURRENT_USER->get_id() + ] + )); + + if($type == 'remove') { + if($favorite) { + $favorite->delete(); + $result['success'] = 'This recipe was removed from your favorite list'; + return $result; + } + else { + return get_ajax_error("This recipe in your favorite list is not exists", 400); + } + } + + if(!$favorite) + $favorite = new FavoriteModel(); + + $favorite->field_user_id = CURRENT_USER->get_id(); + $favorite->field_recipe_id = $recipe_id; + $favorite->save(); + + $result['success'] = 'You have successfully added recipe in your favorite list'; return $result; } \ No newline at end of file diff --git a/apps/Recipes/Models/FavoriteModel.php b/apps/Recipes/Models/FavoriteModel.php new file mode 100644 index 0000000..49e9eac --- /dev/null +++ b/apps/Recipes/Models/FavoriteModel.php @@ -0,0 +1,47 @@ + 'int', + 'recipe_id' => 'int', + 'user_id' => 'int', + ]; + + public static function init_table() + { + $result = db_query('CREATE TABLE ' . static::$table_name . ' ( + id INT AUTO_INCREMENT PRIMARY KEY, + + recipe_id INT NOT NULL, + user_id INT NOT NULL, + + FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE + );'); + return $result; + } + + public function valid() + { + $recipe = RecipeModel::get(array( + [ + 'name' => 'obj.id', + 'type' => '=', + 'value' => $this->field_recipe_id + ] + )); + if(!$recipe) + return ['Recipe is not exists']; + + return true; + } +} \ No newline at end of file -- 2.34.1 From 797d9fd33472855072e3e9b511ca82e0b08b244e Mon Sep 17 00:00:00 2001 From: Stepan Date: Mon, 30 Jun 2025 21:56:20 +0200 Subject: [PATCH 2/3] Fixed eng mistakes --- apps/Recipes/Models/FavoriteModel.php | 2 +- apps/Recipes/Models/RecipeUserMenu.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/Recipes/Models/FavoriteModel.php b/apps/Recipes/Models/FavoriteModel.php index 49e9eac..83c3071 100644 --- a/apps/Recipes/Models/FavoriteModel.php +++ b/apps/Recipes/Models/FavoriteModel.php @@ -40,7 +40,7 @@ class FavoriteModel extends BaseModel ] )); if(!$recipe) - return ['Recipe is not exists']; + return ['Recipe does not exist']; return true; } diff --git a/apps/Recipes/Models/RecipeUserMenu.php b/apps/Recipes/Models/RecipeUserMenu.php index 805a414..4de708d 100644 --- a/apps/Recipes/Models/RecipeUserMenu.php +++ b/apps/Recipes/Models/RecipeUserMenu.php @@ -50,7 +50,7 @@ class RecipeUserMenu extends BaseModel ] )); if(!$recipe) - return ['Recipe is not exists']; + return ['Recipe does not exist']; return true; } -- 2.34.1 From 2caecfe4a4b343cb90e0ce14957b5ee70d6e12e5 Mon Sep 17 00:00:00 2001 From: Stepan Date: Mon, 30 Jun 2025 21:57:10 +0200 Subject: [PATCH 3/3] Fixed eng mistakes 2 --- apps/Ajax/ajax-actions.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/Ajax/ajax-actions.php b/apps/Ajax/ajax-actions.php index 3834500..753fc06 100644 --- a/apps/Ajax/ajax-actions.php +++ b/apps/Ajax/ajax-actions.php @@ -174,7 +174,7 @@ function ajax_favorites() return $result; } else { - return get_ajax_error("This recipe in your favorite list is not exists", 400); + return get_ajax_error("This recipe from your favorites list does not exist.", 400); } } @@ -185,6 +185,6 @@ function ajax_favorites() $favorite->field_recipe_id = $recipe_id; $favorite->save(); - $result['success'] = 'You have successfully added recipe in your favorite list'; + $result['success'] = 'You have successfully added the recipe to your favorites list'; return $result; } \ No newline at end of file -- 2.34.1