import bcrypt def create_user(db, login_info, user_info): """ Creates a new user in the database Args: db (psycopg2.connection): connection to postgres database login_info (dict of str:int): username and password info user_info (dict of str:int): name and dob info Returns: bool, str: status, message """ username, password = login_info["username"], login_info["password"] password_hash = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode() name, dob = user_info["name"], user_info["dob"] with db: with db.cursor() as curs: curs.execute("SELECT * FROM Users WHERE username = %s", (username,)) conflicts = curs.fetchall() if conflicts: return False, "Duplicate username" curs.execute("INSERT INTO Users (username, password_hash, name, dob) VALUES (%s, %s, %s, %s)", (username, password_hash, name, dob)) db.commit() return True, "Success" def get_user_details(db, user_id): """ Gets the details of a user based on their id Args: db (psycopg2.connection): connection to postgres database id (int): user id Returns: bool, dict of str to str, dict of str to str: user existance, login info (username, password), user info (name, dob) """ with db: with db.cursor() as curs: curs.execute("SELECT * FROM Users WHERE id = %s", (user_id,)) user = curs.fetchall() if not user: return False, {}, {} user = user[0] return True, {"username": user[1], "password_hash": user[2]}, {"name": user[3], "dob": user[4]} def create_event(db): pass def finish_event(db, event): pass def create_tournament(db, events): pass