aboutsummaryrefslogtreecommitdiffstats
path: root/pysite
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2018-05-19 20:20:51 +0100
committerGravatar Gareth Coles <[email protected]>2018-05-19 20:20:51 +0100
commitc438ec429c0d9f2bb8b7fffd0dc97041445b97a3 (patch)
tree2feff91c88780a9d60f9e60bead51838187bff30 /pysite
parentFix infractions setup (diff)
Jammer profiles
Diffstat (limited to 'pysite')
-rw-r--r--pysite/tables.py3
-rw-r--r--pysite/views/main/jams/join.py14
-rw-r--r--pysite/views/main/jams/profile.py59
3 files changed, 72 insertions, 4 deletions
diff --git a/pysite/tables.py b/pysite/tables.py
index c68feba0..25e630b2 100644
--- a/pysite/tables.py
+++ b/pysite/tables.py
@@ -110,8 +110,7 @@ TABLES = {
primary_key="id",
keys=sorted([
"id", # str
- "skill_level", # str
- "age", # str
+ "dob", # str
"github_username", # str
"timezone" # str
])
diff --git a/pysite/views/main/jams/join.py b/pysite/views/main/jams/join.py
index eeae1f76..83013a01 100644
--- a/pysite/views/main/jams/join.py
+++ b/pysite/views/main/jams/join.py
@@ -1,7 +1,7 @@
from email.utils import parseaddr
-from flask import request, redirect, url_for
-from werkzeug.exceptions import NotFound, BadRequest
+from flask import redirect, request, url_for
+from werkzeug.exceptions import BadRequest, NotFound
from pysite.base_route import RouteView
from pysite.decorators import csrf
@@ -48,6 +48,11 @@ class JamsJoinView(RouteView, DBMixin, OauthMixin):
# They already tried to apply for this jam
return self.render("main/jams/banned.html", infraction=infraction, jam=jam_obj)
+ participant = self.db.get(self.participants_table, self.user_data["user_id"])
+
+ if not participant:
+ return redirect(url_for("info.jams.profile"))
+
if self.get_response(jam, self.user_data["user_id"]):
return self.render("main/jams/already.html", jam=jam_obj)
@@ -93,6 +98,11 @@ class JamsJoinView(RouteView, DBMixin, OauthMixin):
# They already tried to apply for this jam
return self.render("main/jams/banned.html", infraction=infraction, jam=jam_obj)
+ participant = self.db.get(self.participants_table, self.user_data["user_id"])
+
+ if not participant:
+ return redirect(url_for("info.jams.profile"))
+
if self.get_response(jam, self.user_data["user_id"]):
return self.render("main/jams/already.html", jam=jam_obj)
diff --git a/pysite/views/main/jams/profile.py b/pysite/views/main/jams/profile.py
new file mode 100644
index 00000000..407f842e
--- /dev/null
+++ b/pysite/views/main/jams/profile.py
@@ -0,0 +1,59 @@
+import datetime
+
+from flask import redirect, request, url_for
+from werkzeug.exceptions import BadRequest
+
+from pysite.base_route import RouteView
+from pysite.decorators import csrf
+from pysite.mixins import DBMixin, OauthMixin
+
+
+class JamsProfileView(RouteView, DBMixin, OauthMixin):
+ path = "/jams/profile"
+ name = "jams.profile"
+
+ table_name = "code_jam_participants"
+
+ def get(self):
+ if not self.user_data:
+ return redirect(url_for("discord.login"))
+
+ participant = self.db.get(self.table_name, self.user_data["user_id"])
+
+ if not participant:
+ participant = {"id": self.user_data["user_id"]}
+
+ return self.render(
+ "main/jams/profile.html", participant=participant
+ )
+
+ @csrf
+ def post(self):
+ if not self.user_data:
+ return redirect(url_for("discord.login"))
+
+ participant = self.db.get(self.table_name, self.user_data["user_id"])
+
+ if not participant:
+ participant = {"id": self.user_data["user_id"]}
+
+ dob = request.form.get("dob")
+ github_username = request.form.get("github_username")
+ timezone = request.form.get("timezone")
+
+ if not dob or not github_username or not timezone:
+ return BadRequest()
+
+ # Convert given datetime strings into actual objects, adding timezones to keep rethinkdb happy
+ dob = datetime.datetime.strptime(dob, "%Y-%m-%d")
+ dob = dob.replace(tzinfo=datetime.timezone.utc)
+
+ participant["dob"] = dob
+ participant["github_username"] = github_username
+ participant["timezone"] = timezone
+
+ self.db.insert(self.table_name, participant, conflict="replace")
+
+ return self.render(
+ "main/jams/profile.html", participant=participant, done=True
+ )