summaryrefslogtreecommitdiff
path: root/be
diff options
context:
space:
mode:
authorakiyamn2023-11-02 22:29:09 +1100
committerakiyamn2023-11-02 22:29:09 +1100
commit5461621c421130bd359efff4a10c3e1ba330e85c (patch)
tree32ab149b5993b89c42a46449c23c102858faa3a2 /be
downloadjacbday-5461621c421130bd359efff4a10c3e1ba330e85c.tar.gz
jacbday-5461621c421130bd359efff4a10c3e1ba330e85c.zip
Init
Diffstat (limited to 'be')
-rw-r--r--be/.gitignore3
-rw-r--r--be/app.py65
-rw-r--r--be/points.py79
-rw-r--r--be/requirements.txt1
-rwxr-xr-xbe/run.sh2
5 files changed, 150 insertions, 0 deletions
diff --git a/be/.gitignore b/be/.gitignore
new file mode 100644
index 0000000..853bb7a
--- /dev/null
+++ b/be/.gitignore
@@ -0,0 +1,3 @@
+venv
+__pycache__
+*.db
diff --git a/be/app.py b/be/app.py
new file mode 100644
index 0000000..399ce97
--- /dev/null
+++ b/be/app.py
@@ -0,0 +1,65 @@
+from flask import Flask, request
+from flask_cors import CORS
+from werkzeug.middleware.proxy_fix import ProxyFix
+import points
+
+app = Flask(__name__)
+
+app.wsgi_app = ProxyFix(
+ app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1
+)
+
+CORS(app)
+
+@app.route("/")
+def ping():
+ return "🀄"
+
+TEAMS = ["green", "purple"]
+points.init_databases(TEAMS)
+
+def sanitise(string):
+ return string.lower()
+
+@app.route('/increment/<team>/<username>', methods=["POST"])
+def increment_user_points(team, username):
+ team = team.lower()
+ multiplier = points.get_multiplier(team)
+ return {"points": points.increment_points(sanitise(team), sanitise(username), float(multiplier))}
+
+@app.route('/points/<team>/<username>', methods=["GET"])
+def user_points(team, username):
+ return {"points": points.get_user_points(sanitise(team), sanitise(username))}
+
+@app.route('/points/<team>/', methods=["GET"])
+def get_team_points(team):
+ return {"points": points.get_team_points(sanitise(team))}
+
+@app.route("/leaderboard/", methods=["GET"])
+def get_leaderboard():
+ return points.get_leaderboard()
+
+@app.route("/multiplier/<team>", methods=["GET", "POST"])
+def multiplier(team):
+ if request.method == "GET":
+ return {"multiplier": points.get_multiplier(sanitise(team))}
+ else:
+ data = request.get_json()
+ if "multiplier" in data:
+ return {"multiplier": points.set_multiplier(sanitise(team), data["multiplier"])}
+ return "", 400
+
+@app.route("/prompt/", methods=["GET", "POST"])
+def prompt():
+ if request.method == "GET":
+ return {"prompt": points.get_prompt()}
+ else:
+ data = request.get_json()
+ if "prompt" in data:
+ return {"prompt": points.set_prompt(data["prompt"])}
+ return "", 400
+
+@app.route("/clear/", methods=["POST"])
+def clear():
+ points.init_databases(TEAMS, clear=True)
+ return ""
diff --git a/be/points.py b/be/points.py
new file mode 100644
index 0000000..9ad693b
--- /dev/null
+++ b/be/points.py
@@ -0,0 +1,79 @@
+import shelve
+
+
+def init_databases(teams, clear=False):
+ with shelve.open("points.db", writeback=True) as db:
+ for team in teams:
+ if team not in db or clear:
+ db[team] = {}
+ db[team]["__total"] = 0
+ with shelve.open("settings.db", writeback=True) as db:
+ if "multiplier" not in db or clear:
+ db["multiplier"] = {}
+ for team in teams:
+ if team not in db["multiplier"] or clear:
+ db["multiplier"][team] = 1
+ db["prompt"] = ""
+
+
+# def init_settings(clear=False):
+# with shelve.open("settings.db") as db:
+# if "multiplier" not in db or clear:
+# db["multiplier"] = 1
+
+
+def increment_points(team, username, amount):
+ with shelve.open("points.db", writeback=True) as db:
+ if username not in db[team]:
+ db[team][username] = 0
+ db[team][username] += amount
+ db[team]["__total"] += amount
+ return db[team][username]
+
+
+def get_user_points(team, username):
+ with shelve.open("points.db") as db:
+ if username in db[team]:
+ return db[team][username]
+ return 0
+
+
+def get_team_points(team):
+ return get_user_points(team, "__total")
+
+
+def get_leaderboard():
+ multipliers = None
+ with shelve.open("settings.db") as db:
+ multipliers = db["multiplier"]
+ with shelve.open("points.db") as db:
+ return {
+ "settings": {
+ "prompt": get_prompt(),
+ "multiplier": multipliers
+ }
+ ,
+ "points": dict(db),
+ }
+
+
+def get_multiplier(team):
+ with shelve.open("settings.db") as db:
+ return db["multiplier"][team]
+
+
+def set_multiplier(team, multiplier):
+ with shelve.open("settings.db", writeback=True) as db:
+ db["multiplier"][team] = multiplier
+ return db["multiplier"][team]
+
+
+def get_prompt():
+ with shelve.open("settings.db") as db:
+ return db["prompt"]
+
+
+def set_prompt(prompt):
+ with shelve.open("settings.db", writeback=True) as db:
+ db["prompt"] = prompt
+ return db["prompt"]
diff --git a/be/requirements.txt b/be/requirements.txt
new file mode 100644
index 0000000..b81f683
--- /dev/null
+++ b/be/requirements.txt
@@ -0,0 +1 @@
+Flask>=3.0.0 \ No newline at end of file
diff --git a/be/run.sh b/be/run.sh
new file mode 100755
index 0000000..bbb2676
--- /dev/null
+++ b/be/run.sh
@@ -0,0 +1,2 @@
+source venv/bin/activate
+flask run --host 0.0.0.0 --port 1997