TableOrder/Server/DB/querys.py
2025-07-05 10:13:28 +02:00

154 lines
5.1 KiB
Python

from loguru import logger
import json
import bcrypt
import configparser
from Server.DB.handler import QR, Product, Order, session, User
config = configparser.ConfigParser()
config.sections()
config.read('Options.ini')
class compare:
def is_user_pass_valid(username, password):
session_username = session.query(User).filter(User.username == username).one()
session.commit()
print(session_username.hashed_password)
if bcrypt.hashpw(password.encode('utf-8'), session_username.salt) == session_username.hashed_password.encode('utf-8'):
return True
return False
def is_QRSecret_valid(desk, secret):#TODO FIX! #Feature = True #TODO:Encryption Salting hasing and anti rainbow attack
q = session.query(QR).\
filter(QR.desk.like(int(desk))).\
order_by(QR.qr_secret)
q_QR = q.with_session(session).one()
if q_QR.qr_secret == secret:
return True
else:
return False
def process_main(ordered_list, desk):
'''
Get all verified Products from the order to the db entry
Input: Array ordered_list, INT desk
OUT: True, False if succeded adding to db
'''
if compare.verifie_order(ordered_list):
#products = Product()
order = Order(desk)
session.add(order)
session.commit()
for product in ordered_list:
if int(product[0]) > 0: #dont add not ordered to list
productDB = Product(quantity=int(product[0]),name=product[1],order_id = order.id)
session.add(productDB)
session.commit()
logger.success("Order at desk "+ str(desk) +" resived")
# add a new ordered_list to the database
return True
else:
print("There was an invalid order! Someone messing whit source?")
return False
#TODO: Placeholder
def verifie_order(ordered_list):
'''
if self.desk > self.desk_numbers:
return False
'''
valid_products_list = get.valid_products()
for product in ordered_list:
print(product[1],' ', valid_products_list)
if product[1] in valid_products_list: #product[0] is quantiiy 1 is name_product
pass
else:
return False
return True
class add:
def _create_user(username, password):
if session.query(User).filter_by(username = username).count() < 1:
bytes = password.encode('utf-8')
salt = bcrypt.gensalt()
hash = bcrypt.hashpw(bytes, salt).decode('utf-8')
user = User(username = username, hashed_password = hash, salt= salt)
session.add(user)
session.commit()
def _order(orders, desk):
'''
add order to db
INPUT: DICT orders, desk
OUT: True succes False failure
'''
pass
class get:
'''
def user_in_User(username):
calls db if user in User table
q_session = session.query(User).filter(User.username == username).one()
session.commit()
if q_session:
return q_session.id
return False
'''
def valid_products(get_json_=False):
global config
with open(config['SETTINGS']['path_json_settings'], 'r') as file:
#Parse Json Product List
products = json.load(file)
if get_json_:
return products
else:
valide_products = []
for category in products.get('products'):
for product in products.get('products').get(category):
print(product)
if int(product['quantity']) >= 0:
valide_products.append(product['name'])
return valide_products
def all_orders():
# All unfinished orders (finished is False or string "False")
result = []
desk = 1
orders = session.query(Order).filter(Order.finished == 0).all()
session.commit()
for order in orders:
products = session.query(Product).filter(Product.order_id == order.id , Order.desk_number == desk).all()
session.commit()
list_products = []
for p in products:
#What it shows in orders.html
list_products.append(" x" + str(p.quantity) +" "+ p.name )
result.append((order.desk_number, list_products, order.id))
return result
class update:
#TODO GET JSON to -> DB
def update_products_fromJSON(self):
pass
class set:
def finish_order(order_number):
order = session.query(Order).filter(Order.id == int(order_number)).first()
if order:
order.finished = 1 # or "True
session.commit()
logger.info("Order "+str(order_number)+" marked as finished.")
return True
else:
return False