aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/main/jams/profile.py
diff options
context:
space:
mode:
Diffstat (limited to 'pysite/views/main/jams/profile.py')
-rw-r--r--pysite/views/main/jams/profile.py59
1 files changed, 59 insertions, 0 deletions
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
+ )