133 lines
4.8 KiB
Python
133 lines
4.8 KiB
Python
import mysql.connector
|
|
import configparser
|
|
|
|
config = configparser.ConfigParser()
|
|
|
|
try:
|
|
config.read(".config")
|
|
except Exception as E:
|
|
print(E)
|
|
|
|
def dbConnect():
|
|
mydb = mysql.connector.connect(
|
|
host=config["mysql"]["Host"],
|
|
user=config["mysql"]["Username"],
|
|
passwd=config["mysql"]["Password"],
|
|
database=config["mysql"]["Database"]
|
|
)
|
|
return mydb
|
|
|
|
|
|
def doesTableExist():
|
|
mydb = dbConnect()
|
|
mycursor = mydb.cursor()
|
|
mycursor.execute('''SHOW TABLES''')
|
|
tables = mycursor.fetchall()
|
|
if len(tables) == 0:
|
|
mycursor.execute('''CREATE TABLE USERS (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255), password VARCHAR(255), admin BOOLEAN)''')
|
|
mycursor.execute('''CREATE TABLE LISTS (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))''')
|
|
mycursor.execute('''CREATE TABLE SHOPLIST (id INT AUTO_INCREMENT PRIMARY KEY, item VARCHAR(255), gotten BOOLEAN, user_id INT, list_id INT, FOREIGN KEY (`list_id`) REFERENCES `LISTS`(`id`), FOREIGN KEY (`user_id`) REFERENCES `USERS`(`id`)
|
|
ON DELETE CASCADE)''')
|
|
mycursor.execute('''CREATE TABLE USER_META (user_id INT, list_id INT, FOREIGN KEY (`list_id`) REFERENCES `LISTS`(`id`), FOREIGN KEY (`user_id`) REFERENCES `USERS`(`id`)
|
|
ON DELETE CASCADE)''')
|
|
mydb.close()
|
|
|
|
def runQuery(query, data=None):
|
|
mydb = dbConnect()
|
|
c = mydb.cursor()
|
|
if data is not None:
|
|
c.execute(query, data)
|
|
else:
|
|
c.execute(query)
|
|
if query.lower().startswith("select"):
|
|
ret = c.fetchall()
|
|
else:
|
|
ret = []
|
|
mydb.commit()
|
|
mydb.close()
|
|
return ret
|
|
|
|
def readFromDB():
|
|
# By default load all shopping lists the user is a part of (Most users will only have one so this this fine)
|
|
query = '''select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username, SHOPLIST.list_id from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id inner join USER_META on SHOPLIST.list_id = USER_META.list_id'''
|
|
return runQuery(query)
|
|
|
|
def insertToDB(data):
|
|
query = "INSERT INTO SHOPLIST (item, gotten, user_id, list_id) VALUES (%s, 0, %s, %s)"
|
|
data = (data['item'], data['name'], data["list_id"])
|
|
# print(query)
|
|
runQuery(query, data)
|
|
|
|
|
|
def deleteRow(rowID):
|
|
query = "DELETE FROM SHOPLIST WHERE id = %s"
|
|
data = (rowID, )
|
|
runQuery(query, data)
|
|
|
|
def getItem(rowID):
|
|
query = "UPDATE SHOPLIST set gotten = 1 where id = %s"
|
|
data = (rowID, )
|
|
runQuery(query, data)
|
|
|
|
def unGetItem(rowID):
|
|
query = "UPDATE SHOPLIST set gotten = 0 where id = %s"
|
|
data = (rowID, )
|
|
runQuery(query, data)
|
|
|
|
def get_users(username=None):
|
|
if username == None:
|
|
#return all users
|
|
query = "select username, admin, id from USERS"
|
|
return runQuery(query)
|
|
query = "select username, admin from USERS where username like %s"
|
|
data = (username, )
|
|
return runQuery(query, data)
|
|
|
|
def add_user(userData):
|
|
username = userData["username"]
|
|
password = userData["password"]
|
|
query = "insert into USERS (username, password, admin) values (%s, md5(%s), False)"
|
|
data = (username, password)
|
|
runQuery(query, data)
|
|
|
|
def update_pass(user_id, newpass):
|
|
query = "update USERS set password=md5(%s) where id=%s"
|
|
data = (newpass, user_id)
|
|
runQuery(query, data)
|
|
|
|
def get_items(user_id, list_id=None):
|
|
if list_id != None:
|
|
query = "select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id inner join USER_META on SHOPLIST.list_id = USER_META.list_id where USER_META.user_id = %s and SHOPLIST.list_id = %s"
|
|
data = (user_id, list_id)
|
|
return runQuery(query, data)
|
|
query = "select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id inner join USER_META on SHOPLIST.list_id = USER_META.list_id where USER_META.user_id = %s"
|
|
data = (user_id,)
|
|
return runQuery(query, data)
|
|
|
|
def get_list_ids(user_id):
|
|
ret = {}
|
|
if user_id == "admin":
|
|
query = "SELECT id, name from LISTS;"
|
|
res = runQuery(query)
|
|
else:
|
|
query = "select USER_META.list_id, LISTS.name from USER_META inner join LISTS on LISTS.id = USER_META.list_id where USER_META.user_id = %s"
|
|
data = (user_id,)
|
|
res = runQuery(query, data)
|
|
for lid, name in res:
|
|
ret[str(lid)] = name
|
|
return ret
|
|
|
|
def addList(list_name):
|
|
query = "insert into LISTS (name) values (%s)"
|
|
data = (list_name,)
|
|
runQuery(query, data)
|
|
|
|
def addUserToList(userid, listid):
|
|
query = "insert into USER_META (user_id, list_id) values (%s, %s)"
|
|
data = (userid, listid)
|
|
runQuery(query, data)
|
|
|
|
def doLogin(username, password):
|
|
query = "select id, username, admin from USERS where username = %s and password = md5(%s)"
|
|
data = (username, password)
|
|
return runQuery(query, data) |