File size: 4,153 Bytes
560823b
f9247be
d3662ef
560823b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f6b17c
f9247be
560823b
 
 
 
 
 
6a890b1
 
 
 
 
560823b
 
 
 
ea0c0c1
560823b
 
 
 
 
 
 
 
1f6b17c
 
 
 
 
 
 
5c97774
1f6b17c
 
 
 
 
 
 
 
d0acf6f
 
1f6b17c
 
 
 
 
5c97774
 
 
 
 
 
 
 
 
 
 
a3c0746
 
 
 
d6188d7
f9247be
 
 
 
 
 
a7739f9
f9247be
 
d3662ef
f9247be
 
 
 
 
 
 
 
 
 
7804478
 
 
 
 
 
f9247be
7804478
f9247be
 
 
86b69b9
0b5b559
 
 
 
 
 
 
 
9db9dc4
 
9d8e6a4
 
9db9dc4
 
9d8e6a4
9db9dc4
9d8e6a4
 
4bfd7b8
9d8e6a4
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import os
from secrets import token_urlsafe
import streamlit as st
import sqlite3

DATA_DIR = "/data"

DB_PATH = os.path.join(DATA_DIR, "data.db")


def get_db_connection():
    return sqlite3.connect(DB_PATH)


def initialize_data_storage():
    with get_db_connection() as con:
        cur = con.cursor()
        cur.execute("CREATE TABLE IF NOT EXISTS user_rosters( user_id INTEGER, position_id TEXT, player_id TEXT)")
        cur.execute("CREATE TABLE IF NOT EXISTS users( user_id INTEGER PRIMARY KEY ASC, email TEXT, name TEXT)")
        cur.execute("CREATE TABLE IF NOT EXISTS tokens( user_id INTEGER PRIMARY KEY, token TEXT)")


def update_selection(user_id: str, position_id: str, player_id: str):
    with get_db_connection() as con:
        cur = con.cursor()
        cur.execute(
            f"""DELETE FROM user_rosters where user_id = {user_id} and position_id = '{position_id}'
                    """
        )
        cur.execute(
            f"""INSERT INTO user_rosters (user_id, position_id, player_id )
                    VALUES({user_id}, '{position_id}', '{player_id}')
                    """
        )


def get_user_team(user_id):
    with get_db_connection() as con:
        cur = con.cursor()
        team = cur.execute(f"select * from user_rosters where user_id = {user_id}").fetchall()
    if team:
        return {x[1]: x[2] for x in team}
    else:
        return {}


def add_new_user(email: str, name: str):
    with get_db_connection() as con:
        cur = con.cursor()
        cur.execute(
            f"""INSERT INTO users (email, name )
                    VALUES('{email.lower()}', '{name}')
                    """
        )


def get_user(user_id: int):
    with get_db_connection() as con:
        cur = con.cursor()
        user_data = cur.execute(f"select * from users where user_id = {user_id}").fetchone()
    if not user_data:
        return {}
    return {
        "user_id": user_data[0],
        "email": user_data[1],
        "name": user_data[2],
    }


def get_user_id_if_email_exists(email: str) -> int | None:
    with get_db_connection() as con:
        cur = con.cursor()
        query_result = cur.execute(f"select user_id from users where email = '{email.lower()}'").fetchone()
        if query_result:
            user_id = query_result[0]
        else:
            user_id = None
    return user_id


def is_admin(user_id: int):
    # Replace with db data field later
    return user_id == 1


def login_by_token(token: str):
    # returns true if logged in successfully
    with get_db_connection() as con:
        cur = con.cursor()
        query_result = cur.execute(f"select user_id from tokens where token = '{token}'").fetchone()
        if query_result:
            user_id = query_result[0]
            st.session_state["logged_in_user"] = user_id
        else:
            user_id = None
    return user_id


def create_new_token_for_user(user_id: int, existing_user: bool = False):
    # returns true if logged in successfully
    token = token_urlsafe(32)
    with get_db_connection() as con:
        cur = con.cursor()
        if existing_user:
            cur.execute(
                f"""DELETE FROM tokens where user_id = {user_id}
                        """
            )

        cur.execute(
            f"""INSERT INTO tokens (user_id, token )
                    VALUES({user_id}, '{token}')
                    """
        )
    return token


def drop_tables():
    with get_db_connection() as con:
        cur = con.cursor()
        cur.execute("DROP TABLE user_rosters")
        cur.execute("DROP TABLE users")
        cur.execute("DROP TABLE tokens")


def get_all_users(columns_included: list[str] = ["user_id", "name", "email"]):
    columns_as_str = ",".join(columns_included)
    with get_db_connection() as con:
        cur = con.cursor()
        all_users = cur.execute(f"select {columns_as_str} from users").fetchall()
    return all_users


def get_all_rosters() -> list[tuple[int, str, str]]:
    with get_db_connection() as con:
        cur = con.cursor()
        all_rosters = cur.execute("select * from user_rosters").fetchall()
    return all_rosters