From 4aea8c68ff9d98ec4a70d42df450926112a60b42 Mon Sep 17 00:00:00 2001 From: Jadowyne Ulve Date: Sat, 26 Apr 2025 20:58:12 -0500 Subject: [PATCH] recipes_api.deleteRecipeItem updated to new schema --- .../database_recipes.cpython-312.pyc | Bin 10807 -> 11757 bytes .../__pycache__/recipes_api.cpython-312.pyc | Bin 17837 -> 17752 bytes scripts/recipes/database_recipes.py | 22 ++++++++++++--- scripts/recipes/recipes_api.py | 25 +++++++++++------- 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/scripts/recipes/__pycache__/database_recipes.cpython-312.pyc b/scripts/recipes/__pycache__/database_recipes.cpython-312.pyc index 8d297b837520d70554f8097d84a3d6aee09a3e0a..686a6ced8150d422eab58a8a619920760ac5cb63 100644 GIT binary patch delta 902 zcmZXQ-Afcv7{=%OW8InEWmerR*Ueo&rUZ@hBBYDm9L=b;*0o3pkv(H6nKrZG2P5u< z7llyCxo9B@FNJQlyf6rgyiLL&Xc3{mAXqUFyy`upX0V6hdFT1P?{nsySxf&ORKF^U zhk|84Q|^DPSyDsv#!^%LybrMp^Z23ShO2sz7}+jP8H8@uF5zCMWD{9HG_W@C+vfj@+;M zA6!NMBpS||DKj%Vx%#Qeq(d2&T>Ef|P>J82rt!I0n-?(-^@>95Yj%#u!?Clh;0X98 zUB`=#I40vq4VsU4=(o&4oTeNR?`T1s3(1v|BUw?0u})`|!_BENl_Xek%ui~ybd;Op z9ttqcIgHIX5)SyH_(o%p*6?Sx>Z-%_QPb=lYKqpmq$R*!v))eQnvpglU8&ydk=e!} zi`>Q>8qJ#HcI5UIBV|NJ(WM4Ek}}f$sbo*GJ94H&m+_*%2A68Jd0nGwjB5=pZHFmmV7Tri4ys`0#{T5&j+6lF5WFs zf?Su+6meJx;U~?Fw-oSuEDV+Wlvm3o_j~}{sr~=)z8!-DybmN=*)MEdO+@+ifCOee z$|qXn^=6U0xAKXLqE4rEKW^6h=s2FzYdzhNqsa}v;WzrkJ-bBt>5gT?Erkoa#O=gD u^5R;= delta 275 zcmaDGy*-5QG%qg~0}y03@@B+JOyrYbTrg2xsh%%|xrH%`C511AC6zUWHI*%eEtNfu zErq>>HHrfvn#PjC0Tkf`iU8H5F{N+s@il`O1$V5Xq*6&CKG)a1;9)X;*I#FEV))KeK*H5o%R z`6tiO37-5#N0Q40=pjZRE}l49TsL3K`2&LhqxAyO&miif3Xqt=3=s+i3w;3!2^Tp7 GH2?r;xJ9`D diff --git a/scripts/recipes/__pycache__/recipes_api.cpython-312.pyc b/scripts/recipes/__pycache__/recipes_api.cpython-312.pyc index 605321dced94a2f990b91348b7481835ee665021..d3a72d3d953ad1f54b9c4ec4e90ec54eb29c4053 100644 GIT binary patch delta 803 zcmZuvUr19?7{BMDHWRnr?0QC+e2qpOWY$70>lgZ7BC%14E4> zWKMS$2I>=_)GBq>% zl0;ll7D){G5|ykRAa*863%0f`f9my;))W>~NC+0^KEwu(2co>DPxmoF z)767w7-HFLQof@q`M|R$0gdNi*LC9|Kjal0rAbXUzWbcO9c_4{>%QlyH<=fiX5Vnr zd&=FK2NrSbNCZ?3xo3s#tdQ^2I09LgRhgVy;uz9%g^AHIq%Pqv zNAtMWErLzl8z4t*G@M)1!3Uz<7=^w{`64=?#cH_`s=r4}aza#(v diff --git a/scripts/recipes/database_recipes.py b/scripts/recipes/database_recipes.py index 89d7bd9..0c03116 100644 --- a/scripts/recipes/database_recipes.py +++ b/scripts/recipes/database_recipes.py @@ -90,7 +90,7 @@ def getPicturePath(site:str, payload:tuple, convert:bool=True): rows = cur.fetchone()[0] return rows -def postRecipe(site:str, payload:tuple, convert=True): +def postAddRecipe(site:str, payload:tuple, convert:bool=True): database_config = config.config() record = () with open("scripts/recipes/sql/postRecipe.sql") as file: @@ -108,7 +108,7 @@ def postRecipe(site:str, payload:tuple, convert=True): except (Exception, psycopg2.DatabaseError) as error: raise postsqldb.DatabaseError(error, payload, sql) -def postRecipeItem(site:str, payload:tuple, convert=True): +def postAddRecipeItem(site:str, payload:tuple, convert:bool=True): database_config = config.config() record = () with open("scripts/recipes/sql/postRecipeItem.sql") as file: @@ -126,7 +126,7 @@ def postRecipeItem(site:str, payload:tuple, convert=True): except (Exception, psycopg2.DatabaseError) as error: raise postsqldb.DatabaseError(error, payload, sql) -def postRecipeUpdate(site, payload, convert=True): +def postUpdateRecipe(site:str, payload:tuple, convert:bool=True): database_config = config.config() updated = () with psycopg2.connect(**database_config) as conn: @@ -142,4 +142,18 @@ def postRecipeUpdate(site, payload, convert=True): updated = postsqldb.tupleDictionaryFactory(cur.description, rows) elif rows and not convert: updated = rows - return updated \ No newline at end of file + return updated + +def postDeleteRecipeItem(site:str, payload:tuple, convert:bool=True): + database_config = config.config() + deleted = () + sql = f"DELETE FROM {site}_recipe_items WHERE id=%s RETURNING *;" + with psycopg2.connect(**database_config) as conn: + with conn.cursor() as cur: + cur.execute(sql, payload) + rows = cur.fetchone() + if rows and convert: + deleted = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + deleted = rows + return deleted \ No newline at end of file diff --git a/scripts/recipes/recipes_api.py b/scripts/recipes/recipes_api.py index c2632bf..5b8e208 100644 --- a/scripts/recipes/recipes_api.py +++ b/scripts/recipes/recipes_api.py @@ -114,7 +114,7 @@ def addRecipe(): author=user_id, description=recipe_description ) - recipe = database_recipes.postRecipe(site_name, recipe.payload()) + recipe = database_recipes.postAddRecipe(site_name, recipe.payload()) webpush.push_ntfy('New Recipe', f"New Recipe added to {site_name}; {recipe_name}! {recipe_description} \n http://test.treehousefullofstars.com/recipe/view/{recipe['id']} \n http://test.treehousefullofstars.com/recipe/edit/{recipe['id']}") return jsonify({'recipe': recipe, 'error': False, 'message': 'Recipe added successful!'}) return jsonify({'recipe': recipe, 'error': True, 'message': f'method {request.method}'}) @@ -163,7 +163,7 @@ def postUpdate(): recipe_id = int(request.get_json()['recipe_id']) update = request.get_json()['update'] site_name = session['selected_site'] - recipe = database_recipes.postRecipeUpdate(site_name, {'id': recipe_id, 'update': update}) + recipe = database_recipes.postUpdateRecipe(site_name, {'id': recipe_id, 'update': update}) return jsonify({'recipe': recipe, 'error': False, 'message': 'Update of Recipe successful!'}) return jsonify({'recipe': recipe, 'error': True, 'message': 'Update of Recipe unsuccessful!'}) @@ -189,7 +189,7 @@ def postCustomItem(): qty=float(request.get_json()['qty']), links=request.get_json()['links'] ) - database_recipes.postRecipeItem(site_name, recipe_item.payload()) + database_recipes.postAddRecipeItem(site_name, recipe_item.payload()) recipe = database_recipes.getRecipe(site_name, (rp_id, )) return jsonify({'recipe': recipe, 'error': False, 'message': 'Recipe Item was added successful!'}) return jsonify({'recipe': recipe, 'error': True, 'message': f'method {request.method} not allowed!'}) @@ -220,7 +220,7 @@ def postSKUItem(): item_id=item['id'], links=item['links'] ) - database_recipes.postRecipeItem(site_name, recipe_item.payload()) + database_recipes.postAddRecipeItem(site_name, recipe_item.payload()) recipe = database_recipes.getRecipe(site_name, (recipe_id, )) return jsonify({'recipe': recipe, 'error': False, 'message': 'Recipe Item was added successful!'}) return jsonify({'recipe': recipe, 'error': True, 'message': f'method {request.method} is not allowed!'}) @@ -244,7 +244,7 @@ def uploadImage(recipe_id): file_path = current_app.config['UPLOAD_FOLDER'] + f"/recipes/{file.filename.replace(" ", "_")}" file.save(file_path) site_name = session['selected_site'] - database_recipes.postRecipeUpdate(site_name, {'id': recipe_id, 'update': {'picture_path': file.filename.replace(" ", "_")}}) + database_recipes.postUpdateRecipe(site_name, {'id': recipe_id, 'update': {'picture_path': file.filename.replace(" ", "_")}}) return jsonify({'error': False, 'message': 'Recipe was updated successfully!'}) @recipes_api.route('/recipe/getImage/') @@ -267,17 +267,22 @@ def get_image(recipe_id): return send_from_directory('static/pictures/recipes', picture_path) @recipes_api.route('/recipe/deleteRecipeItem', methods=["POST"]) +@login_required def deleteRecipeItem(): + """ delete recipe item from database by passing the recipe item ID + --- + responses: + 200: + description: recipe item deleted successfully. + """ recipe = {} if request.method == "POST": id = int(request.get_json()['id']) - database_config = config() site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - deleted_item = postsqldb.RecipesTable.delete_item_tuple(conn, site_name, (id, ), convert=True) - recipe = postsqldb.RecipesTable.getRecipe(conn, site_name, (int(deleted_item['rp_id']), ), convert=True) + deleted_item = database_recipes.postDeleteRecipeItem(site_name, (id, )) + recipe = database_recipes.getRecipe(site_name, (int(deleted_item['rp_id']),)) return jsonify({'recipe': recipe, 'error': False, 'message': f'Recipe Item {deleted_item['item_name']} was deleted successful!'}) - return jsonify({'recipe': recipe, 'error': True, 'message': 'Recipe Item was not deleted unsuccessful!'}) + return jsonify({'recipe': recipe, 'error': True, 'message': f'method {request.method} is not allowed!'}) @recipes_api.route('/recipe/saveRecipeItem', methods=["POST"]) def saveRecipeItem():