From 1a1ffddddd341e174b4e8d0072ae8cc9c89f5720 Mon Sep 17 00:00:00 2001 From: Jadowyne Ulve Date: Sun, 1 Jun 2025 09:38:06 -0500 Subject: [PATCH] items_API.addPrefix migrated to new schema --- application/items/database_items.py | 78 ++++++++++++++++++++++++++++- application/items/items_API.py | 34 +++++++++---- 2 files changed, 102 insertions(+), 10 deletions(-) diff --git a/application/items/database_items.py b/application/items/database_items.py index 117de1a..4b622eb 100644 --- a/application/items/database_items.py +++ b/application/items/database_items.py @@ -208,6 +208,37 @@ def getZone(site:str, payload:tuple, convert:bool=True): except Exception as error: raise postsqldb.DatabaseError(error, payload, sql) +def getItemInfoTuple(site:str, payload:tuple, convert=True): + """_summary_ + + Args: + conn (_type_): _description_ + site (_type_): _description_ + payload (_type_): (item_info_id,) + convert (bool, optional): _description_. Defaults to True. + + Raises: + DatabaseError: _description_ + + Returns: + _type_: _description_ + """ + selected = () + database_config = config.config() + sql = f"SELECT * FROM {site}_item_info WHERE id=%s;" + try: + with psycopg2.connect(**database_config) as conn: + with conn.cursor() as cur: + cur.execute(sql, payload) + rows = cur.fetchone() + if rows and convert: + selected = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + selected = rows + return selected + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + def selectItemLocationsTuple(site_name, payload, convert=True): """select a single tuple from ItemLocations table for site_name @@ -826,11 +857,56 @@ def updateConversionTuple(site:str, payload: dict, convert=True, conn=None): if self_conn: conn.commit() conn.close() - + return updated except Exception as error: raise postsqldb.DatabaseError(error, payload, sql) +def updateItemInfoTuple(site:str, payload: dict, convert=True, conn=None): + """_summary_ + + Args: + conn (_T_connector@connect): Postgresql Connector + site (str): + table (str): + payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}} + convert (bool, optional): determines if to return tuple as dictionary. Defaults to False. + + Raises: + DatabaseError: + + Returns: + tuple or dict: updated tuple + """ + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_item_info SET {set_clause} WHERE id=%s RETURNING *;" + try: + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = False + self_conn = True + + with conn.cursor() as cur: + cur.execute(sql, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + def postUpdateItemLocation(site, payload, conn=None): item_location = () diff --git a/application/items/items_API.py b/application/items/items_API.py index 7bd3393..7d12431 100644 --- a/application/items/items_API.py +++ b/application/items/items_API.py @@ -786,19 +786,35 @@ def updateConversion(): @items_api.route('/addPrefix', methods=['POST']) def addPrefix(): + """ POST add prefix to the system given a item_info_id and prefix_id + --- + parameters: + - in: header + name: item_info_id + schema: + type: integer + default: 1 + required: true + description: item_info_id to be updated + - in: header + name: prefix_id + schema: + type: integer + default: 1 + required: true + description: prefix_id to be added + responses: + 200: + description: conversion updated successfully. + """ if request.method == "POST": item_info_id = request.get_json()['parent_id'] prefix_id = request.get_json()['prefix_id'] - print(item_info_id) - print(prefix_id) - database_config = config() site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - prefixes = db.ItemInfoTable.select_tuple(conn, site_name, (item_info_id,))['prefixes'] - print(prefixes) - prefixes.append(prefix_id) - db.ItemInfoTable.update_tuple(conn, site_name, {'id': item_info_id, 'update':{'prefixes': prefixes}}) - return jsonify(error=False, message="Prefix was added successfully") + prefixes = database_items.getItemInfoTuple(site_name, (item_info_id,))['prefixes'] + prefixes.append(prefix_id) + database_items.updateItemInfoTuple(site_name, {'id': item_info_id, 'update':{'prefixes': prefixes}}) + return jsonify(error=False, message="Prefix was added successfully") return jsonify(error=True, message="Unable to save this prefix, ERROR!") @items_api.route('/deletePrefix', methods=['POST'])