|
|
import psycopg2
|
|
|
|
|
|
from consts import DB_CONFIG
|
|
|
|
|
|
def add_product_to_shop(
|
|
|
name: str,
|
|
|
cost: str, # строка, например "100.00" или "50"
|
|
|
count: int,
|
|
|
reserved: int = 0, # по умолчанию 0
|
|
|
picture_url: str = "",
|
|
|
description: str = "",
|
|
|
type: str = ""
|
|
|
) -> int:
|
|
|
connection = psycopg2.connect(**DB_CONFIG)
|
|
|
cursor = connection.cursor()
|
|
|
try:
|
|
|
# Вставка с автоматической генерацией id и возвратом id
|
|
|
cursor.execute("""
|
|
|
INSERT INTO shop (name, cost, count, reserved, picture_url, description, type)
|
|
|
VALUES (%s, %s::NUMERIC, %s, %s, %s, %s, %s)
|
|
|
RETURNING id
|
|
|
""", (name, cost, count, reserved, picture_url, description, type))
|
|
|
|
|
|
product_id = cursor.fetchone()[0]
|
|
|
connection.commit()
|
|
|
return product_id
|
|
|
|
|
|
except psycopg2.Error as e:
|
|
|
print("Ошибка при работе с PostgreSQL:", e)
|
|
|
connection.rollback()
|
|
|
raise
|
|
|
except Exception as e:
|
|
|
print("Ошибка при добавлении товара:", e)
|
|
|
connection.rollback()
|
|
|
raise
|
|
|
finally:
|
|
|
cursor.close()
|
|
|
connection.close()
|
|
|
|
|
|
def delete_product_from_shop(product_id: int) -> bool:
|
|
|
connection = psycopg2.connect(**DB_CONFIG)
|
|
|
cursor = connection.cursor()
|
|
|
try:
|
|
|
# Удаляем товар по id
|
|
|
cursor.execute("DELETE FROM shop WHERE id = %s", (product_id,))
|
|
|
|
|
|
if cursor.rowcount == 0:
|
|
|
raise ValueError(f"Товар с id={product_id} не найден")
|
|
|
|
|
|
connection.commit()
|
|
|
return True
|
|
|
|
|
|
except psycopg2.Error as e:
|
|
|
print("Ошибка при работе с PostgreSQL:", e)
|
|
|
connection.rollback()
|
|
|
raise
|
|
|
except ValueError:
|
|
|
connection.rollback()
|
|
|
raise
|
|
|
finally:
|
|
|
cursor.close()
|
|
|
connection.close()
|