163 lines
5.4 KiB
Python
163 lines
5.4 KiB
Python
import sqlite3
|
|
from typing import Optional
|
|
|
|
class Orders:
|
|
def __init__(self, db_path="instance/app_database.db"):
|
|
self.db_path = db_path
|
|
self._create_orders_table()
|
|
self._create_orders_map_table()
|
|
|
|
def _create_orders_table(self):
|
|
"""Create the orders table if it doesn't already exist."""
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS orders (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id TEXT NOT NULL,
|
|
status TEXT NOT NULL DEFAULT 'on_hold'
|
|
);
|
|
""")
|
|
conn.commit()
|
|
|
|
def _create_orders_map_table(self):
|
|
"""Create the orders table if it doesn't already exist."""
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute("""
|
|
CREATE TABLE IF NOT EXISTS orders_products (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
product_id TEXT,
|
|
orders_id TEXT,
|
|
quantity INTEGER
|
|
);
|
|
|
|
""")
|
|
conn.commit()
|
|
|
|
def add_order(self, user_id):
|
|
try:
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute("""
|
|
INSERT INTO orders (user_id)
|
|
VALUES (?)
|
|
""", (user_id,))
|
|
conn.commit()
|
|
return True
|
|
except sqlite3.IntegrityError:
|
|
return False
|
|
|
|
def add_product_to_order(self, product_id, orders_id, quantity):
|
|
try:
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute("""
|
|
INSERT INTO orders_products (product_id, orders_id, quantity)
|
|
VALUES (?,?,?)
|
|
""", (product_id, orders_id, quantity))
|
|
conn.commit()
|
|
return True
|
|
except sqlite3.IntegrityError:
|
|
return False
|
|
|
|
def get_on_hold_order(self, user_id):
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute("""
|
|
SELECT * FROM orders
|
|
WHERE user_id = ? and status = 'on_hold'
|
|
""", (user_id,))
|
|
row = cursor.fetchone()
|
|
if row:
|
|
return {
|
|
"id": row[0],
|
|
"user_id": row[1],
|
|
"status": row[2],
|
|
}
|
|
return None
|
|
|
|
def update_order_status(self, status, id):
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute('''
|
|
UPDATE orders SET status = ?
|
|
WHERE id = ?
|
|
''', (status, id))
|
|
conn.commit()
|
|
|
|
def get_order_products(self, id):
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute("""
|
|
SELECT * FROM orders_products
|
|
WHERE orders_id = ?
|
|
""", (id,))
|
|
rows = cursor.fetchall()
|
|
result = []
|
|
if rows:
|
|
for row in rows:
|
|
buffer = {
|
|
"id": row[0],
|
|
"prdouct_id": row[1],
|
|
"orders_id": row[2],
|
|
"quantity": row[3]
|
|
}
|
|
result.append(buffer)
|
|
return result
|
|
return []
|
|
|
|
def update_order_map_quantity(self, id, quantity):
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute('''
|
|
UPDATE orders_products SET quantity = ?
|
|
WHERE id = ?
|
|
''', (quantity, id))
|
|
conn.commit()
|
|
|
|
def get_orders(self):
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute("""
|
|
SELECT * FROM orders
|
|
""")
|
|
rows = cursor.fetchall()
|
|
if rows:
|
|
buffer = []
|
|
for row in rows:
|
|
r = {
|
|
"id": row[0],
|
|
"user_id": row[1],
|
|
"status": row[2],
|
|
}
|
|
buffer.append(r)
|
|
return buffer
|
|
return []
|
|
|
|
def get_orders_for_user(self, user_id):
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute("""
|
|
SELECT * FROM orders WHERE user_id = ?
|
|
""", (user_id,))
|
|
rows = cursor.fetchall()
|
|
if rows:
|
|
buffer = []
|
|
for row in rows:
|
|
r = {
|
|
"id": row[0],
|
|
"user_id": row[1],
|
|
"status": row[2],
|
|
}
|
|
buffer.append(r)
|
|
return buffer
|
|
return []
|
|
|
|
def remove_product_from_order(self, order_id, product_id):
|
|
with sqlite3.connect(self.db_path) as conn:
|
|
cursor = conn.cursor()
|
|
cursor.execute('''
|
|
DELETE FROM orders_products WHERE orders_id=? and product_id=?;
|
|
''', (order_id, product_id))
|
|
conn.commit() |